【问题标题】:Laravel Routing to Wrong ViewLaravel 路由到错误的视图
【发布时间】:2015-03-03 16:22:42
【问题描述】:

我正在使用 Laravel 4.2。我有一个应用程序路由到错误的视图,尽管 URL 是正确的。单击按钮时,它应该路由到users.create (UsersController@create),但实际上是路由到UsersController@show。但是,解析的 URL 是正确的,并且 DOM 元素列出了正确的 URL。谁能帮帮我?

这是我的路线文件:

// Home page
Route::get('/', 'BaseController@index');

// Define User model to pass through routes
Route::model('user', 'User');

// Create custom route for editing a user
Route::get('users/edit/{user}', 
    array('as' => 'users.edit', 'uses' => 'UsersController@edit'));

// Create custom route for showing a user
Route::get('users/{user}',
    ['as' => 'users.show', 'uses' => 'UsersController@show']);

// Remaining routes
Route::resource('users', 'UsersController', 
    array('except' => array('edit', 'show')));

这是我的UsersController,其中包含有问题的两个功能:

class UsersController extends \BaseController {

protected $user;

public function create()
{
    return View::make('users/create');
}

public function show($user)
{   
    return View::make('users/show', ['user' => $user]);
}}

以下是来自php artisan routes的相关结果:

GET:HEAD    users/{user}    users.show      UsersController@show
GET:HEAD    users/create    users.create    UsersController@create

感谢您的帮助!

编辑: 问题的答案是简单地重新排序路由,以便首先定义资源。我知道 Laravel 会抓取与 URI 匹配的第一个路由,但我仍然不明白为什么没有传递用户对象的路由会选择定义为 users/{user} 的路由。此外,我通过link_to_route() 访问路由,也就是说,通过名称。为什么 Laravel 会选择与我明确命名的路线不同的路线?

我想这些问题超出了最初问题的范围,但我非常感谢有人提供进一步的解释。问题解决了!

【问题讨论】:

    标签: php laravel laravel-routing


    【解决方案1】:

    我首先想到的是没有“创造”的路线。有“restful”控制器,但也许您只想尝试将路由放入。在提供 html 时使用 restful 路由我有点不舒服。在我正在处理的项目中,我一直在尝试保留那些用于数据/json传输,以支持外部api操作。

    【讨论】:

    • 嗯...我是整个 REST 概念的新手;我想我只是不明白其中的意义。我会尝试手动配置路线,看看效果如何。
    【解决方案2】:

    我认为您的路线设置将create 识别为user/{user} 中的{user},因此重定向到user/show/create 作为您的“用于显示用户的自定义路线”设置。

    您可能必须避免在users/ 路由之后立即获取字符串变量。

    【讨论】:

    • 我的users.create 路由由Route::resource(...) 定义。为什么它不起作用?
    • @kendaop 我认为路由只是处理 URI 字符串的问题,这意味着您并没有真正将 User 对象传递给带有 {user} 说明符的 URI。 Laravel 获取 URI 并将其与路由规则匹配,从上到下。这就是为什么您可以通过更改路由定义的顺序来解决问题。而且因为 URI 只是一个字符串,Laravel 无法区分您使用 link_to_route() 明确指定的控制器和 users/{user}
    猜你喜欢
    • 2015-07-19
    • 2020-05-22
    • 2017-03-15
    • 2017-01-06
    • 2017-03-06
    • 2014-12-29
    • 1970-01-01
    • 2015-09-25
    相关资源
    最近更新 更多