Routes Laravel 3.x-自动检测路由

Routes Laravel 3.x-自动检测路由,routes,laravel,laravel-3,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)'

我正在建立一个CMS,并试图在涉及路线时使用更好的方法。假设我有一个“页面”控制器和以下方法:“创建”、“编辑”和“删除”。它们的URI如下所示:

admin/pages/create
admin/pages/edit
admin/pages/delete
我可以硬编码路线,一切都会好起来,但很快就会一团糟。我搜索了很多,找到了下面的代码:

Route::any('admin/(.*)),array('defaults'=>'index','uses'=>'admin.METHOD@(:1)');
其思想是从URL中检测该方法,并将其替换为“admin.method@”。代码将处理请求并将其定向到正确的控制器方法,但我不知道如何执行


任何帮助都是完美的。

好的,您可以在Laravel 3中这样做,但有一些问题需要注意。首先,这可能是它的外观

Route::any('admin/(:any)/(:any)','admin(:1)@(:2)';
这将匹配
yourapp.dev/admin/pages/create
的URI,并将其路由到
admin\u pages\u控制器上的
get\u create
方法

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

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

// Delete
Route::delete('admin/(:any)', 'your_controller@(:1)');
这里需要注意的第一件事是URI中何时有连字符。您可能最终会遇到管理员、用户帐户和控制器,因为Laravel不会进行任何检测。在这些情况下,在路由中使用
Controller::call()
可能更容易

Route::any('admin/(:any)/(:any'),函数($controller,$method)
{
返回控制器::调用(“{$Controller}@{$method}”);
});
目前,这与前面的示例相同。您需要进行任何替换,并研究变量的大小写。您还可以通过将该方法设置为可选并恢复为默认方法,例如
index

基本上,您试图实现的是资源路由,这在Laravel4中处理得更干净。我快速搜索了Laravel3捆绑包存储库,找到了一个。从这个捆绑包的外观来看,它为您提供了很多繁重的功能,并且非常可定制。

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

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

理想情况下,您应该以REST方式处理此问题,并且每个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()等。

我强烈建议人们避免使用这种方法,因为检测到的控制器的顺序可能因系统而异,这通常会导致意外行为,包括一些路由抛出404。我同意你的看法,我相信我们的其他解决方案都是最好的方法,但我知道人们喜欢有自己的选择。尽管我会放弃一些额外的知识。