Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [LR] Routing do widoków, 2 pytania
markonix
post 13.01.2016, 00:17:25
Post #1





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

Ostrzeżenie: (0%)
-----


  1. Route::get('page/{id}', function ($name) {
  2. return view('pages.static.'. $name);
  3. });

Mam taki prosty route, który pozwoli na tworzenie takich statycznych podstron bez mojej ingerencji.
Wystarczy stworzyć widok w folderze i wsio.

Mam jednak zagwozdki:
1) Jak wyświetlić 404 gdy widoku nie ma, przy obecnym rozwiązaniu wyrzuca błąd o braku widoku (oczywiste)?
2) Chciałbym pominąć te "page" czyli mieć example.com/faq zamiast example.com/pages/faq? Jak zrobić taki główny route, który zbierze wszystkie requesty ale zostawi te należące do aplikacji?

edit:
W sumie z tym punktem 2 przyszedł mi najoczywistszy pomysł.. Po prostu dać:
  1. Route::get('{id}', function ($name) {
  2. return view('pages.static.'. $name);
  3. });

na samym końcu pliku.

Czy to "ładne" i bezpieczne rozwiązanie?

Ten post edytował markonix 13.01.2016, 00:18:08


--------------------
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
Pyton_000
post 13.01.2016, 08:54:17
Post #2





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


Rzucany masz taki wyjątek:

Kod
throw new InvalidArgumentException("View [$name] not found.");


Dodaj obsługę tutaj: app/Exceptions/Handler.php

np:/

  1. if ($e instanceof InvalidArgumentException) {
  2. abort(404);
  3. }
Go to the top of the page
+Quote Post
markonix
post 13.01.2016, 12:08:16
Post #3





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

Ostrzeżenie: (0%)
-----


  1. if ($e instanceof InvalidArgumentException)
  2. {
  3. abort(404);
  4. }
  5.  
  6. $class = get_class($e);
  7. if ($class == 'InvalidArgumentException')
  8. {
  9. abort(404);
  10. }

Jakaś podpowiedź czemu działa tylko ta druga, brzydsza metoda? :/


--------------------
Go to the top of the page
+Quote Post
Pyton_000
post 13.01.2016, 12:53:20
Post #4





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


\InvalidArgumentException ?

Zrób dd($e) i będziesz wiedział jakiego dokładnie jest typu.

Ten post edytował Pyton_000 13.01.2016, 12:54:04
Go to the top of the page
+Quote Post
markonix
post 13.01.2016, 15:44:35
Post #5





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

Ostrzeżenie: (0%)
-----


Dumpowałem i wskazywało na InvalidArgumentException dlatego zgłupiałem.
Slash oczywiście zadziałał, oczywiście bo nawet PHPSTORM to podpowiadał.

Wracając do tematu właściwego mam coś takiego:
  1. public function report(Exception $e)
  2. {
  3. if ($e instanceof \InvalidArgumentException && strstr($e->getMessage(), 'pages.static') !== false)
  4. {
  5. abort(404);
  6. }
  7. return parent::report($e);
  8. }

Ten drugi warunek jest po to aby zachować funkcjonalność wyjątków gdy faktycznie brakuje widoku w przypadku normalnych kontrolerów (np. zrobimy literówkę z metodzie view()).
Brzydko ale działa jak powinno.


--------------------
Go to the top of the page
+Quote Post
KrzychuKa
post 14.01.2016, 08:46:46
Post #6





Grupa: Zarejestrowani
Postów: 5
Pomógł: 3
Dołączył: 25.06.2015

Ostrzeżenie: (0%)
-----


Czy nie byłoby gustowniej poprostu sprawdzić czy widok istnieje?
  1. view()->exists('pages.static.'. $name)
Go to the top of the page
+Quote Post
markonix
post 14.01.2016, 10:30:12
Post #7





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

Ostrzeżenie: (0%)
-----


Czyli coś takiego:
  1. Route::get('{id}', function ($name) {
  2. if (view()->exists('pages.static.'. $name)) {
  3. return view('pages.static.' . $name);
  4. }
  5. return abort(404);
  6. });


Też o czymś takim myślałem, ale nie jestem przyzwyczajony że w LR wszystkie metody i funkcje są tak "magicznie" wszędzie dostępne.
W każdym razie praktyczna nauka Exceptions/handler też się przyda na przyszłość.


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 15.06.2025 - 02:41