我希望有人可以帮助我处理具有多个段的URL的动态路由。我已经在网上搜索了一些内容,但是没有找到能够帮助我解决特定情况的东西。
一些背景信息......几年前,我开发了一个基于CodeIgniter构建的CMS包,用于客户自定义网站。此CMS包具有几个模块(页面、博客、日历、询问等)。对于页面模块,我将路由缓存到“自定义路由”配置文件中,该文件将页面的完整路由(包括父级、祖先等)与页面的ID关联起来。这样做是为了避免查找要显示的页面时需要执行数据库查询。
目前,我正在使用Laravel(5.1)重新构建此CMS包[同时学习Laravel]。在开始新版本的页面模块之前,我需要解决路由问题。
我知道我可以做类似于......
// routes.php
Route::get('{slug}', ['uses' => 'PageController@view']);
// PageController.php
class PageController extends Controller
{
public function view($slug)
{
// do a query to get the page by the slug
// display the view
}
}
如果我不允许嵌套页面,那么这将起作用,但是我允许。我仅根据父级强制唯一性的slug。因此,可能会有多个具有fargo slug的页面...
- locations/fargo
- staff/fargo
我的初始想法是创建一个配置文件,其中包含旧版系统所做的动态路由。路由仅在特定时间更改(在创建页面、修改slug或更改父级时),因此“缓存”它们非常好。但是,我还是Laravel的新手,所以不确定该如何处理这种情况。
我确实设法找出以下路由可行。但是,这是设置这个最好的方法吗?
Route::get('about/foobar', function(){
return App::make('\App\Http\Controllers\PageController')->callAction('view', [123]);
});
Route::get('foobar', function(){
return App::make('\App\Http\Controllers\PageController')->callAction('view', [345]);
});
基本上,当创建页面时(或更改slug或parent时),我想将特定路由绑定到特定页面ID。我是不是过于复杂化了?
非常感谢任何有关此事的帮助或指导。
谢谢!