我正在建立一个CMS,并试图在路线上使用更好的方法。假设我有一个“页面”控制器和以下方法:“创建”,“编辑”和“删除”。它们的URI将是这样的:
admin/pages/create
admin/pages/edit
admin/pages/delete
我可以硬编码路线,一切都会好的,但很快就会变得一团糟。我经常搜索并找到以下代码:
Route::any('admin/(.*)', array('defaults' => 'index', 'uses' => 'admin.METHOD@(:1)'));
我们的想法是从URL中检测方法并将其替换为“admin.METHOD @”。代码将处理请求并将其指向正确的控制器方法,我无法弄清楚如何操作。
任何帮助都是完美的。
答案 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()等