Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [inny][Laravel5] Pełny routing na sluggach z bazy danych
dado
post
Post #1





Grupa: Zarejestrowani
Postów: 194
Pomógł: 2
Dołączył: 12.04.2004
Skąd: Częstochowa

Ostrzeżenie: (10%)
X----


Laravel 5.1

Nadziobałem własny routing pozwalający na użycie pełnych slugów: adres strona.pl/to-jest-jakis-tam-slug wywołuje odpwiadający slugowi kontroler akcji parametry. efekty uzyskałem poprzez middleware-a. Wszystko działa fajnie ale jest jeden poważny problem. Jeśli nie ma zdefiniowanego routingu w bazie uzyte w middleware return $next($request); nie powoduje szukania w innych regułach routingu (np cześć administracyjna w ścieżce /admin ) tylko wyświetla pustą stronę.
Czy wiecie może jak można poradzić sobie z tym problemem? Np czy jest jakiś parametr dający możliwość dodania wykluczeń do danej reguły routingu? Ktoś? Coś?

Plik middlewarea:
  1. <?php
  2.  
  3. namespace App\Modules\Front\Http\Middleware;
  4.  
  5. use App;
  6. use Closure;
  7. use Route;
  8. use App\Modules\Front\Models\SluggableModel;
  9.  
  10. class FrontendSlugRoute
  11. {
  12.  
  13. /**
  14.   * Handle an incoming request.
  15.   *
  16.   * @param \Illuminate\Http\Request $request
  17.   * @param \Closure $next
  18.   * @internal param $slug
  19.   * @return mixed
  20.   */
  21. public function handle($request, Closure $next)
  22. {
  23. if(isset($request->slug) && !empty($request->slug)){
  24. if($slug = SluggableModel::where('slug', $request->slug)->first()){
  25.  
  26. App::call([app($slug->controller), $slug->action], $slug->params);
  27. }
  28. else{
  29. return $next($request);
  30. }
  31. }
  32. else{
  33. return $next($request);
  34. }
  35. }
  36. }


zawartość pliku route.php dla tego routingu
  1. Route::get('/{slug}', ['as' => 'sluggable', 'middleware' => 'sluggable', function () {
  2.  
  3. }])->where('slug', '.*');


Ten post edytował dado 5.01.2016, 14:43:15
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Pyton_000
post
Post #2





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

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


Da się zrobić. ale z racji tego że używasz tego Slug w Module to pliki routingu sa ładowane po kolei (Wpierw z globalnego routes.php potem z Modeli pewnie wg jakiegoś tam schematu).

Wynika to z kolejności wczytywania.

Możesz albo zostawić tak jak masz albo ustawić ServiceProvider tak aby globalny routes.php wczytywał sie ostatni (po ModulesServiceProvider) i tam na koniec wpakować tego Slug. Oczywiście okraszając go odpowiednim namespace.

@phpion tutaj to nie zadziała, bo url pasuje do patternu Slug więc go wykonuje. nie przejdziesz dalej. Trzeba by było poszukać czy da się oszukać tak aby właśnie puścił po braku w bazie. Wtedy miejsce deklaracji mogłoby być dowolne.

Ten post edytował Pyton_000 7.01.2016, 13:11:48
Go to the top of the page
+Quote Post

Posty w temacie
- dado   [inny][Laravel5] Pełny routing na sluggach z bazy danych   5.01.2016, 14:40:38
- - Pyton_000   Hmm.. Nie za bardzo rozumiem a co chodzi ale może ...   5.01.2016, 14:55:27
- - dado   Widziałem już tą paczkę. Niestety nie pozwala ona ...   5.01.2016, 15:01:49
- - Pyton_000   Bo to ma być ostatni routing który łapie wszystko ...   5.01.2016, 15:08:30
- - dado   Racja to rzeczywiście załatwiało by sprawę gdyby p...   5.01.2016, 15:18:29
- - Pyton_000   Jeśli robisz route:list to ta lista wynikowa jest ...   5.01.2016, 15:22:10
- - dado   No niestety nie działa tak jak piszesz. Owszem zał...   6.01.2016, 12:10:22
- - Pyton_000   Ok. W takim razie w config/app.php znajdź: KodIl...   6.01.2016, 12:55:23
- - dado   Hej, też nie działa niestety. W middleware wylist...   7.01.2016, 09:50:45
- - Pyton_000   Aaaaa dobra... Mój błąd. Nie zauważyłem że tego sl...   7.01.2016, 10:04:00
- - dado   Zrobiłem tak jak pisałeś i niestety routing jest n...   7.01.2016, 13:01:05
- - phpion   Wprawdzie z Laravelem styczności nie miałem, ale s...   7.01.2016, 13:07:20
- - Pyton_000   Da się zrobić. ale z racji tego że używasz tego Sl...   7.01.2016, 13:07:48
- - phpion   Ok, niech sobie pasuje do wzorca *. Ja ten warunek...   7.01.2016, 13:16:33
- - Pyton_000   Tak, middleware jest takim filtrem. Jednak odpala...   7.01.2016, 13:42:49
- - phpion   Zgadza się, ale jeśli założymy, że cały routing sl...   7.01.2016, 13:49:32
- - memory   Nie łatwiej zrobić moduł z tym routingiem i dodać ...   7.01.2016, 14:05:04
- - dado   Najprościej byłoby po order z manifestu. Sprawdzał...   7.01.2016, 14:40:05
|- - phpion   Cytat(dado @ 7.01.2016, 14:40:05 ) @p...   7.01.2016, 14:59:45
- - Pyton_000   @dado jeśli faktycznie jest tam coś takiego jak or...   7.01.2016, 15:13:55
- - dado   Udało się w końcu po parametrze order mainfestu ...   8.01.2016, 09:02:26


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

 



RSS Aktualny czas: 5.10.2025 - 17:59