Как динамически обрабатывать маршруты Laravel, используя переменную в слаге - PullRequest
0 голосов
/ 11 сентября 2018

Я хочу иметь запись маршрута, которая динамически обрабатывает запросы, основываясь на слаге в URL. Я попробовал код ниже, но закрытие, кажется, мешает. Я также заменил замыкание действиями контроллера и безуспешно попробовал другие варианты. Лучшее, что я придумал, пока ниже:

$bladeFiles = [
    "about-us",
    "join",
    "contact",
];

foreach ($bladeFiles as $thisView) {
    Route::get($thisView, function () {
        global $thisView;
        if (View::exists($thisView)) {
            return view($thisView);
        } else {
            return redirect()->route('homepage');
        }
    })->name($thisView);
}

Проблема с приведенным выше фрагментом состоит в том, что global $thisView всегда является нулем внутри замыкания.

Мысли

Ответы [ 2 ]

0 голосов
/ 11 сентября 2018

Здравствуйте, я делаю что-то очень похожее на то, что вы хотите

Route::get('pages/{pageName}',function($pageName){
 if(view()->exists('pages.'.$pageName)){
   return view('pages.'.$pageName);
 } else {

  return redirect('/');

 }

});

так что я делаю, у меня есть папка с именами страниц
я записываю представления в этопапка с именами слагов, такими как contact-us.blade.php
, когда я иду на маршрут "pages / contact-us", она ищет это представление в папке
, если оно существует, оно возвращает представление, иначе просто перенаправляетна главную страницу
единственное отличие в моем коде в том, что вам нужно будет называть такие маршруты
{{url('pages/"$pageName"')}} instead of {{rout($pageName)}}
я надеюсь, что мой код поможет

0 голосов
/ 11 сентября 2018

Попробуйте передать $thisView через use:

$bladeFiles = [
    "about-us",
    "join",
    "contact",
];

foreach ($bladeFiles as $thisView) {
    Route::get($thisView, function () use ($thisView) { // <-- here
        if (View::exists($thisView)) {
            return view($thisView);
        } else {
            return redirect()->route('homepage');
        }
    })->name($thisView);
}
...