小编Bec*_*cky的帖子

Laravel 5应用中的动态路由

我希望有人可以帮助我为可能有多个段的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.

我只是过于复杂的事情?

任何有关这方面的帮助或指示将不胜感激.

谢谢!

php laravel laravel-5

14
推荐指数
1
解决办法
2万
查看次数

标签 统计

laravel ×1

laravel-5 ×1

php ×1