Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何使用不同的控制器和相同的URL创建路由';拉威尔4号在哪?_Php_Laravel_Laravel 4_Routes - Fatal编程技术网

Php 如何使用不同的控制器和相同的URL创建路由';拉威尔4号在哪?

Php 如何使用不同的控制器和相同的URL创建路由';拉威尔4号在哪?,php,laravel,laravel-4,routes,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> my GameController.php中的以下方法: public function check

我的视图game.blade.php中有以下链接:

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

<a href="{{ URL::route('checkSecondName', $item->PK_item_id) }}"></a>  
my GameController.php中的以下方法:

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

}

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

}
问题是:


这两个链接都指向checkSecondName()函数

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

问题是,无论你呼叫哪一条

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

…Laravel将生成相同的URL路径,即-
/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> 

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

将路线更改为:

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

谢谢我还通过使用以下路径修复了此问题:Route::get('/game/{itemId}}\u first',array('as'=>'checkFirstName','uses'=>'GameController@checkFirstName')); 路由::get('/game/{itemId}\u second',数组('as'=>'checkSecondName','uses'=>'GameController@checkSecondName'));
<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
    }
}
Route::get('/game/{itemId}_first', array('as' => 'checkFirstName', 'uses' => 'GameController@checkFirstName'));
Route::get('/game/{itemId}_second', array('as' => 'checkSecondName', 'uses' => 'GameController@checkSecondName'));