我希望有人可以帮助我为可能有多个段的URL进行动态路由.我一直在网上搜索一下,但我发现的任何东西都不能帮助我解决我的具体情况.
一点点背景......几年前,我开发了一个基于CodeIgniter构建的自定义客户端网站的CMS包.此CMS包有几个模块(页面,博客,日历,查询等).对于Pages模块,我将路由缓存到"自定义路由"配置文件,该文件将页面的完整路由(包括父级,祖父级等)与页面ID相关联.我这样做是为了让我不必进行数据库查找来查找要显示的页面.
我目前正在使用Laravel(5.1)[正在学习Laravel]重建这个CMS包.在我继续使用新版本的软件包中的Pages模块之前,我需要弄清楚路由情况.
我知道我可以做点像......
// 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
}
}
Run Code Online (Sandbox Code Playgroud)
如果我不允许嵌套页面,这将有效,但我这样做.而且我只根据父母强制执行slug的唯一性.所以可能会有不止一个页面上有一段法鲁 ...
与我使用CodeIgniter构建的包一样,我希望能够避免额外的数据库查找以找到要显示的正确页面.
我最初的想法是创建一个配置文件,其中包含动态路由,就像我使用旧版本的系统一样.路由只会在特定时间更改(创建页面时,修改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]);
});
Run Code Online (Sandbox Code Playgroud)
基本上,我想在创建页面时(或更改段塞或父项时)将特定路由绑定到特定页面ID.
我只是过于复杂的事情?
任何有关这方面的帮助或指示将不胜感激.
谢谢!