【问题标题】:Laravel 4 - changing resource root routing pathLaravel 4 - 更改资源根路由路径
【发布时间】:2013-08-08 17:09:02
【问题描述】:

在 Laravel 4 安装中,使用 Jeffrey Way's Laravel 4 Generators,我使用他示例中的脚手架命令设置了一个“推文”资源:

php artisan generate:scaffold tweet --fields="author:string, body:text"

这为推文类型生成了模型、视图、控制器、迁移和路由信息。迁移数据库后,访问http://localhost:8000/tweets 工作正常,并显示预期内容。

此时routes.php文件的内容为:

Route::resource('tweets', 'TweetsController');

现在我想将tweets 的url 上移一级到admin/tweets,所以上面的url 应该变成:http://localhost:8000/admin/tweets。请注意,我并未将“管理员”视为一种资源,而只是出于假设的组织目的而添加它。

将 routes.php 文件更改为:

Route::resource('admin/tweets', 'TweetsController');

不起作用,并显示以下错误:

无法为命名路由“tweets.create”生成 URL,因为这样的路由不存在。

使用以下内容时也是如此:

Route::group(array('prefix' => 'admin'), function() {
    Route::resource('tweets', 'TweetsController');
});

正如this stackoverflow question 中所建议的那样。

使用php artisan routes 表明命名路由现在也有admin 前缀,将tweets.create 变成admin.tweets.create


为什么错误提示找不到tweets.create?不应该自动解决(根据路由表判断)使用admin.tweets.create吗?

如何更改我的路由以使此错误不再发生?

【问题讨论】:

  • 我刚刚用新的资源控制器进行了测试,它对我来说很好。问题不在于路由,它与视图文件一起检查你的视图文件是否有指向路由的链接,如link_to_route('tweets.create', 'Add new tweet'),这个正在创建错误,因为当您将 admin 添加为前缀时,tweets.create 不存在所以将其更改为 admin.tweets.create 在每个位置,在您的控制器中也使用过命名路由
  • 感谢您的快速回复!我实际上只是自己注意到了这一点。在发布问题之前应该看起来更长一点:P

标签: laravel laravel-4 uri


【解决方案1】:

我刚刚使用新的资源控制器进行了测试,它对我来说很好用。 问题不在于路由,而在于您的应用程序中使用的named routes

检查您的视图文件是否有指向类似 link_to_route('tweets.create', 'Add new tweet') 的路由的链接,这会产生错误,因为当您将 admin 添加为前缀时,tweets.create 不存在所以将其更改为 admin.tweets.create 在您的每个位置controller 也在使用命名路由的地方。

【讨论】:

  • 只是出于好奇,如果您添加这样的前缀,是否有更好的方法来链接视图中的路由而不会中断?可能使用 link_to_action?
  • 是的,最好的选择link_to_action('TweetsController@create', 'Add new tweet')
猜你喜欢
  • 2013-08-20
  • 1970-01-01
  • 2015-08-29
  • 2015-03-04
  • 1970-01-01
  • 2015-05-23
  • 1970-01-01
  • 1970-01-01
  • 2014-06-27
相关资源
最近更新 更多