Laravel中的动态网址问题

时间:2017-04-30 14:13:26

标签: php laravel

您好,我的项目分为两部分:前端网址和后端网址。后端网址就像$obj= json_decode($return); $appId = $obj->allresponses->app_id; echo $appId; ,前端网址就像base-url/admin/pagename

我想创建一些动态页面。网址名称来自数据库。

这是base-url/pagename文件的路线:

web.php

这是我的控制器

Route::any('{slug}', 'PageController@show');

不知何故,我想避免考虑以public function show($slug = null) { if('admin' != $slug){ $page = Pages::where('route', $slug)->where('active', 1); $page = $page->firstOrFail(); return view($page->template)->with('page', $page); } } 开头的每个网址。我想知道我是否可以从baseurl/admin/开始。如果有,怎么样?

2 个答案:

答案 0 :(得分:0)

首先定义所有静态路由以获取优先级问题。然后在最后用一些正则表达式

定义你的任何路线
Route::any('{slug}', 'PageController@show')->where('slug', '^[a-zA-Z0-9-]*$');

这告诉网址只允许使用字母数字和短划线-。所以任何带正斜杠的网址都不会起作用。

/my-first-page-1 --> should work
/my/first/page/2 --> shouldn't work

这样你知道baseurl/admin/永远不会有效。您可以在线搜索更多正则表达式。

答案 1 :(得分:0)

试试这个:

Route::any('/base-url/admin/{slug}', 'SomeController@someMethod');

Route::any('{slug}', 'PageController@show');

laravel路由从上到下匹配,当它找到第一个匹配时它将停止,因此首先定义的路由优先于后面定义的路由,在这种情况下,第一个路由将匹配任何以{{{}开头的url请求。 1}},第二条路线将匹配其他所有路线。

您只需要将/base-url/admin/替换为负责该功能的控制器