【发布时间】: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