У меня есть несколько маршрутов в web.php:
Route::get('/','PagesController@index');
Route::get('/contact','PagesController@contact');
и так далее…
Мне нужно получить в моем PagesController текущий «модуль» (индекс, контакт или что-то еще).
Код контроллера:
class PagesController extends Controller
{
public function index()
{
$menu = new Menu();
$links = $menu->getMenu();
//$header=url()->current(); // returns the full url, e.g. http://test.com/
//$header=Route::current(); // error: Class Route not found
return view("index",['links'=>$links,'header'=>$header]);
}
}
Например, заголовок $ должен быть равен «/» внутри PagesController@index
а также $header = "contact"
внутри PagesController@contact
,
Мне нужно универсальное решение для всех модулей, которые будут у меня в будущем.
Большое спасибо!
У меня не было возможности проверить это, однако вы должны достичь этого с помощью следующего:
Route::get('/{page?}', function($page = 'index') {
return app('App\Http\Controllers\PageController')->{$page}($page);
});
По сути, это настройка маршрута, чтобы иметь $page
переменная. Если имя страницы не передано (например, contact
) мы по умолчанию index
,
Мы наконец используем app()
помощник для вызова PageController
а затем использовать ->{$page}()
синтаксис для вызова метода динамического контроллера (в случае по умолчанию index
).
Надеюсь это поможет.
Других решений пока нет …