我将基于laravel nova制作自己的CMS。现在,我正在使“页面”起作用。我将把页面放在包含pages
列的表url
的行中。在routes/web.php
文件的末尾,我有与任何路由都匹配的路由:
Route::get( .... );
Route::post( .... );
Route::get('/{page}', 'PageController@myRouter')->where('page', '[A-Za-z0-9_\-\/]+');
在myRoute
方法中,我将捕获一个URL并尝试在数据库中查找具有该URL的页面;一切正常,但是当我输入<domain_of_my_site>/nova
进入管理面板时,我得到404。因此,nova的路由比我的任何请求路由都晚。那么,如何解决呢?我该如何放置
Route::get('/{page}', 'PageController@myRouter')->where('page', '[A-Za-z0-9_\-\/]+');
真的要结束吗?
答案 0 :(得分:1)
我的路由文件中的通用子弹也有类似的问题。我设法将子弹的模式限制为字母数字字符(包括破折号,连字符和斜杠*),但排除了Nova路由(nova-api
和nova-vendor
)以及通往管理员的Nova路径面板(nova
)。
routes/web.php
文件的外观如下:
Route::get('/{page}', 'PageController@myRouter');
以及{page}
文件中RouteServiceProvider
中app/Providers/RouteServiceProvider.php
的模式:
public function boot()
{
Route::pattern('page', '^(?!nova|nova-api|nova-vendor).[a-zA-Z0-9-_\/]+$');
parent::boot();
}
*)请注意,此模式还允许使用/page/one/two
之类的子弹。