2

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

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

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

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

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

现在我想将 urltweets向上移动一级到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');
});

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

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


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

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

4

1 回答 1

2

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

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

于 2013-08-07T12:05:14.063 回答