0

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

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

我可以对路线进行硬编码,一切都会好起来的,但很快就会一团糟。我搜索了很多,发现下面的代码:

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

想法是从 URL 中检测方法并将其替换为“admin.METHOD@”。该代码将处理请求并将其定向到正确的控制器方法,但我不知道该怎么做。

任何帮助都是完美的。

4

3 回答 3

1

好的,您可以在 Laravel 3 中执行此操作,但您需要注意一些问题。首先这是它的外观。

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

这将匹配 URIyourapp.dev/admin/pages/create并将其路由到控制器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。从这个捆绑包的外观来看,它为您完成了很多繁重的工作,并且非常可定制。

于 2013-05-01T03:45:48.693 回答
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() 等。

于 2013-05-01T22:16:24.457 回答
0

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

Route::controller(Controller::detect());
于 2013-05-01T22:08:10.033 回答