如何使用不同的控制器和laravel 4使用相同的URL进行路由?

时间:2015-06-28 19:51:28

标签: php laravel laravel-4 routes

我在视图game.blade.php中有这些链接:

<a href="{{ URL::route('checkFirstName', $item->PK_item_id) }}"></a> 

<a href="{{ URL::route('checkSecondName', $item->PK_item_id) }}"></a>  

这些路由在mu routes.php文件中:

Route::get('/game/{itemId}', array('as' => 'checkFirstName', 'uses' => 'GameController@checkFirstName'));
Route::get('/game/{itemId}', array('as' => 'checkSecondName', 'uses' => 'GameController@checkSecondName'));

和我的GameController.php中的这些方法:

public function checkFirstName($itemId)
{
    dd('check first name from ' . $itemId);

}

public function checkSecondName($itemId)
{
    dd('check second name from ' . $itemId);

}

问题:

两个链接都转到checkSecondName()函数。

3 个答案:

答案 0 :(得分:1)

您的路由设计是错误的 - 您的路由都匹配相同的路径,因此这里发生的是第二个路由覆盖第一个路径。尝试使用不同的路径,或者如果两个控制器都提供相同的功能,则可能只使用一个控制器。 您不能拥有两条匹配相同路径的不同路线。

答案 1 :(得分:1)

事情是,你打电话给...

URL::route('checkSecondName', $item->PK_item_id)

...或

URL::route('checkFirstName', $item->PK_item_id)

... Laravel将生成相同的网址路径,即 - /game/{itemId}。为方便起见,存在命名路由。最后,重要的是路径声明中指定的路径。

所以,会发生什么是Laravel检查路径以找到匹配的路线,但在你的情况下,有两个匹配。最后一个是按设计选择的。

这应该告诉你的是非常简单的:你不能有相同的路由调用不同的控制器方法。 可以的不同之处在于使用的动词:Route::get('/game/{itemId}')Route::post('/game/{itemId}')不同,但这只是一个旁注。

这里可以做的是例如有一个额外的参数来确定要完成的行动类型:

<强>路线

Route::get('/game/{itemId}/{type}', array('as' => 'checkName', 'uses' => 'GameController@checkName'));

<强> HTML

<a href="{{ URL::route('checktName', ['itemId' => $item->PK_item_id, 'type' => 'first']) }}"></a> 

<a href="{{ URL::route('checktName', ['itemId' => $item->PK_item_id, 'type' => 'last']) }}"></a> 

<强>控制器

public function checkName($itemId, $type)
{
    if ($type === 'first') {
        // first name handling        
    } else {
        // last name handling
    }
}

答案 2 :(得分:0)

Lessugar的答案是正确的。我还找到了另一个解决方案,所以我想我也应该在这里添加它。

将路线更改为:

var sources = gulp.src(["!./client/bower_components/**/*"
                 "./client/**/*.js", "./client/**/*.css"], {read: false});