Laravel 3.x - 自动检测路由

时间:2013-04-30 13:31:18

标签: routes laravel laravel-3

我正在建立一个CMS,并试图在路线上使用更好的方法。假设我有一个“页面”控制器和以下方法:“创建”,“编辑”和“删除”。它们的URI将是这样的:

admin/pages/create
admin/pages/edit
admin/pages/delete

我可以硬编码路线,一切都会好的,但很快就会变得一团糟。我经常搜索并找到以下代码:

Route::any('admin/(.*)', array('defaults' => 'index', 'uses' => 'admin.METHOD@(:1)'));

我们的想法是从URL中检测方法并将其替换为“admin.METHOD @”。代码将处理请求并将其指向正确的控制器方法,我无法弄清楚如何操作。

任何帮助都是完美的。

3 个答案:

答案 0 :(得分:1)

好的,你可以在Laravel 3中做到这一点,但是你需要注意一些问题。首先,这是它的外观。

Route::any('admin/(:any)/(:any)', 'admin.(:1)@(:2)');

这将匹配yourapp.dev/admin/pages/create的URI,并将其路由到get_create控制器上的Admin_Pages_Controller方法。

这里需要注意的第一件事是你的URI中有连字符。您可能最终得到Admin_User-accounts_Controller,因为Laravel没有进行任何检测。在这些情况下,在路线中使用Controller::call()可能更容易。

Route::any('admin/(:any)/(:any)', function($controller, $method)
{
    return Controller::call("{$controller}@{$method}");
});

目前与前面的例子相同。您需要对变量进行任何替换和精确套管。您也可以通过使方法可选并恢复为index等默认方法来获取该示例。

基本上你要实现的是资源丰富的路由,在Laravel 4中处理得更加清晰。我快速搜索了Laravel 3捆绑存储库并提出了Routely。从这个包的外观来看,它为你做了很多繁重的工作,而且可以自定义。

答案 1 :(得分:0)

“Controller :: detect方法只返回为应用程序定义的所有控制器的数组。” - Laravel 3 docs

Route::controller(Controller::detect());

答案 2 :(得分:0)

理想情况下,您应该重新处理这个问题,并且每个HTTP谓词都有不同的路由(请求方法)。从那里,也许您只需通过一个控制器发送所有流量。

// Create
Route::post('admin/(:any)', 'your_controller@(:1)');

// Edit
Route::put('admin/(:any)', 'your_controller@(:1)');

// Delete
Route::delete('admin/(:any)', 'your_controller@(:1)');

从这里,您的控制器可以为您想要处理的所有不同类型的事物定义方法。如post_pages(),put_modules(),delete_entries()等