Laravel 5: 自定义路由

Laravel 5: custom routing

我正在构建一个站点,该站点包含两种不同类型的组件:pages(包含图像和文本的静态文件)和 forms(接受输入的动态文档)。我将通过管理面板创建和编辑这两个,因此每个都有一个存储库模型和控制器。

在 Laravel 中可以很容易地创建如下所示的路由:

Route::match(['get', 'post'], '/pages/{one?}/{two?}/{three?}', 'PagesController@loadPage');
Route::match(['get', 'post'], '/forms/{one?}/{two?}/{three?}', 'FormsController@loadForm');

不幸的是,这会给使用该网站的人带来一些难看的 URL:

我希望从这些链接中删除 "pages" 或 "forms",然后检查数据库以确定加载哪个:

我创建了一个具有两个属性的 Path eloquent 模型:pathcontroller。所以我目前有以下内容:

Route::match(['get', 'post'], '{one?}/{two?}/{three?}', function() {
    $path = Path::where('path', '=', implode('/', func_get_args()))->take(1)->get()->first();
    // Somehow use $path->controller to load the proper controller
});

我试过使用 App::make($path->controller) 但它抛出错误:"Class PagesController does not exist"

我相信我可以使用中间件在请求到达我的应用程序之前对其进行修改(因此相应地预先处理 "pages/" 或 "forms/" 而无需修改用户看到的 URL)但是我找不到办法做到这一点。

我已经做了一个测试来完全满足这个要求。希望你会发现这个帮助。

我的路线是这样的:以防万一获取方法:

Route::get('test/{param}', array('as' => 'test1', function(){
    return "glade to see you here....1";
}));
Route::get('test/{param}', array('as' => 'test2', function(){
    return "glade to see you here....2";
}));

我的 html 看起来像:

{{link_to_route('test1',"test1",1)}}
{{link_to_route('test2',"test2",2)}}

好吧,让我换个说法,我在这里关心的是用不同的名字定义相似的路线,并通过他们的名字来称呼他们。通过这种方法你可以达到你的要求。

但是您可以使用不同的名称定义您的路线,无论您的路线看起来如何,如果仍然不清楚是否可以实现您的目标,请告诉我。

一件简单的事情就是根据数据库记录检查 url 模式。这就是我对代表复杂网站结构的简单 url 所做的。您可以使用 table 来存储 url 字符串和 url 类型(页面、表单...),每个 url 都是唯一的。