Php 拉维7结合途径
我在拉雷维尔宣布了这条路线:Php 拉维7结合途径,php,laravel,.htaccess,routes,laravel-7,Php,Laravel,.htaccess,Routes,Laravel 7,我在拉雷维尔宣布了这条路线: Route::get('pages/{page}/{slug}', 'Common\Pages\CustomPageController@show') ->middleware(['web', 'prerenderIfCrawler']); 如果您向以下人员提出请求,此路线可以正常工作: https://example.com/pages/1/test-page https://example.com/pages/2/other-page https
Route::get('pages/{page}/{slug}', 'Common\Pages\CustomPageController@show')
->middleware(['web', 'prerenderIfCrawler']);
如果您向以下人员提出请求,此路线可以正常工作:
https://example.com/pages/1/test-page
https://example.com/pages/2/other-page
https://example.com/pages/3/url-test
问题是,我需要一个更友好的网址以及
https://example.com/test-page
https://example.com/other-page
https://example.com/url-test
我想删除名为的后缀pages
,页面的数字永远不会改变,并且每个页面的数字都是静态的
我试着为每一个都创建静态路由,但无法让它工作
Route::get('other-page', array('as' => 'other-page', function() {
return App::make('Common\Pages\CustomPageController')->show(2);
}))->middleware(['web', 'prerenderIfCrawler']);
如果您能提供一些帮助,我将不胜感激。您可以随时在控制器中获取URL段,并使用它来了解您所在的页面。如果不想这样做,可以在“操作”中传递额外信息以指定页面:
Route::middleware(['web', 'prerenderIfCrawler'])->group(function () {
Route::get('test-page', [
'uses' => 'Common\Pages\CustomPageController@show',
'page' => 'test-page',
]);
...
});
然后,您可以在控制器中获得这些额外信息:
public function show(Request $request)
{
$page = $request->route()->getAction('page');
...
}
public function show($slug)
{
$page = Page::where('slug', $slug)->first();
// ...
}
public function show(Page $page)
{ ^^^^^^^^^^
// ...
}
如果您知道所有页面,则可以使用带有正则表达式约束的路由参数将其限制为仅限于这些页面名称:
Route::get('{page:slug}', ...)->where('page', 'test-page|other-page|...');
public function show(Page $page)
{
...
}
您总是可以在控制器中获取URL段,并使用它来了解您所在的页面。如果不想这样做,可以在“操作”中传递额外信息以指定页面:
Route::middleware(['web', 'prerenderIfCrawler'])->group(function () {
Route::get('test-page', [
'uses' => 'Common\Pages\CustomPageController@show',
'page' => 'test-page',
]);
...
});
然后,您可以在控制器中获得这些额外信息:
public function show(Request $request)
{
$page = $request->route()->getAction('page');
...
}
public function show($slug)
{
$page = Page::where('slug', $slug)->first();
// ...
}
public function show(Page $page)
{ ^^^^^^^^^^
// ...
}
如果您知道所有页面,则可以使用带有正则表达式约束的路由参数将其限制为仅限于这些页面名称:
Route::get('{page:slug}', ...)->where('page', 'test-page|other-page|...');
public function show(Page $page)
{
...
}
您可以使用通配符来捕获您的路线,如下所示:
Route::get('/{slug}', 'Common\Pages\CustomPageController@show')
->middleware(['web', 'prerenderIfCrawler']);
然后在控制器中:
public function show(Request $request)
{
$page = $request->route()->getAction('page');
...
}
public function show($slug)
{
$page = Page::where('slug', $slug)->first();
// ...
}
public function show(Page $page)
{ ^^^^^^^^^^
// ...
}
只要小心你的路线。它应该在你的路线结束,否则它将捕获你的应用程序的所有请求
// ...
// my other routes
// ...
Route::get('/{slug}', ...);
顺便说一下,如果要使用slug属性绑定页面模型,请执行以下操作:
Route::get('/{page:slug}', 'Common\Pages\CustomPageController@show')->//...
^^^^^^^^^
然后在控制器中:
public function show(Request $request)
{
$page = $request->route()->getAction('page');
...
}
public function show($slug)
{
$page = Page::where('slug', $slug)->first();
// ...
}
public function show(Page $page)
{ ^^^^^^^^^^
// ...
}
检查文档。您可以使用通配符来捕捉您的路线,如下所示:
Route::get('/{slug}', 'Common\Pages\CustomPageController@show')
->middleware(['web', 'prerenderIfCrawler']);
然后在控制器中:
public function show(Request $request)
{
$page = $request->route()->getAction('page');
...
}
public function show($slug)
{
$page = Page::where('slug', $slug)->first();
// ...
}
public function show(Page $page)
{ ^^^^^^^^^^
// ...
}
只要小心你的路线。它应该在你的路线结束,否则它将捕获你的应用程序的所有请求
// ...
// my other routes
// ...
Route::get('/{slug}', ...);
顺便说一下,如果要使用slug属性绑定页面模型,请执行以下操作:
Route::get('/{page:slug}', 'Common\Pages\CustomPageController@show')->//...
^^^^^^^^^
然后在控制器中:
public function show(Request $request)
{
$page = $request->route()->getAction('page');
...
}
public function show($slug)
{
$page = Page::where('slug', $slug)->first();
// ...
}
public function show(Page $page)
{ ^^^^^^^^^^
// ...
}
检查文档。您好,我已在您的网站上向您发送了一封电子邮件。RegardsHello,我在你的网站上给你发了一封电子邮件。当做