【发布时间】:2016-01-05 07:50:03
【问题描述】:
我希望有人可以帮助我为可以有多个段的 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
}
}
如果我不允许嵌套页面,这将起作用,但我允许。而且我只根据父项强制执行 slug 的唯一性。所以可能会有不止一个页面包含 fargo ...
- 位置/法戈
- 员工/法戈
与我使用 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]);
});
基本上,我想在创建页面时(或更改 slug 或父级时)将特定路由绑定到特定页面 ID。
我只是把事情复杂化了吗?
我们将不胜感激任何有关这方面的帮助或指导。
谢谢!
【问题讨论】:
-
Am I just overcomplicating things?,IMOYes。此外,这些路线看起来像静态的,如果您不允许IDs 的任何占位符,则没有动态。每条路由只绑定到一个特定的id。 -
就我计划如何设置而言,我认为没有任何方法可以使用不需要我进行额外数据库查询来查找正确页面的动态路由。我会为其他模块使用动态路由,比如博客,但对于常规页面,我认为它不会起作用。