如何在 Laravel 中调用正确的控制器函数?

How do I call the right controller function in Laravel?

我有一个按钮,当我点击那个按钮时,我就会user/create。我无能为力地试图调试为什么我的 show() 函数正在执行而不是我的创建函数。

路线

// Auth Group 
$router->group(['middleware' => 'auth'], function() {

    //Users
    Route::get('user/{id}', array('before' =>'profile', 'uses'=>'UserController@show'));
   
});

// Auth and Admin Group 
$router->group(['middleware' => ['auth', 'admin']], function() {

    Route::get('user/create', array('as'=>'user.create', 'uses'=>'UserController@create'));
    
});

显然,我设置user/create调用create函数。


用户控制器

Show - 我不知道为什么要执行这个函数。

public function show($id)
{
    dd("I'm inside the show function ");

    $user = User::findOrFail($id);
    return View::make('users.show')
        ->with('user', $user);
}

创建 - 假设调用这个函数

// Bring up create form for Aveniros user
public function create(){
    return View::make('users.create');
}

有人知道为什么吗?

注意 /user/create 匹配路线 Route::get('user/{id}', array());
您可以向用户 id 添加一个约束,以便只匹配整数:

Route::get('user/{id}', array(
    'before' =>'profile', 
    'uses'=>'UserController@show'
))->where('id', '[0-9]+');

您也可以调换路线的顺序,这样 Route::get('/user/create') 将首先匹配。

有趣的是..这实际上是 Laravel 5 上的 Laracasts 中涵盖的一个具体示例。是的,将非通配符任务 (/create) 的路由放在通配符 ({id}) 之前,否则 ({id}) 会处理所有事情,它永远不会到达 /create。