如何修改或更新laravel的隐式控制器以获得所需的URL?

时间:2016-03-23 07:00:13

标签: controller routes laravel-5.2 implicit

我正在使用Route:Controller进行laravel 5.2项目。

我发现自己处于一个有趣的境地。

假设我的路线文件有此代码

Route::controller('test','TestController');

TestController有以下方法

class TestController extends Controller
{
    public function getIndex(){
        dd('index');
    }
    public function getDetails($id){
     return $id.'/details';
    }
    public function getItem($var1,$var2){
     return $var1.$var2.'/item';
    }


}

因此,如果我路由localhost:8000/test,则会显示getIndex()方法的内容。

现在我想浏览网址,了解项目的详细信息

localhost::8000/test/item1/details
localhost::8000/test/item2/details
localhost::8000/test/item3/details
....
localhost::8000/test/itemN/details

当我的路线控制器就像这样

时,我不知道该怎么做
Route::controller('test','TestController');

因为所有都是变量。所以为了得到我想要的结果,我改变了我的路线:

Route::controller('test/{id}','TestController');

现在我可以访问这些网址

localhost::8000/test/item3/details

但问题是我现在无法访问localhost::8000/test

我也想访问以下网址

localhost::8000/test/item3/shop1/details
localhost::8000/test/item3/shop2/details

那么如何在不使用route::resource

的情况下解决这个问题

3 个答案:

答案 0 :(得分:0)

我找到了克服这一挑战的解决方案。

在我的路线文件中,我添加了两条新路线

Route::get('test/{var1}/{var2}/details','TestController@getItem');
Route::get('test/{id}/details','TestController@getDetails');

现在我可以访问这些网址

localhost::8000/test
localhost::8000/test/item3/details
localhost::8000/test/item3/shop1/details
但是发现了一个问题。也就是说,我也可以使用以下网址访问数据

localhost::8000/test/details/item3
localhost::8000/test/details/item3/shop1

所以为了防止这种情况,我改变了我的方法

public function getDetails($id){
     return $id.'/details';
    }
    public function getItem($var1,$var2){
     return $var1.$var2.'/item';
    }

public function details($id){
     return $id.'/details';
    }
    public function item($var1,$var2){
     return $var1.$var2.'/item';
    }

和路由修改为

Route::get('test/{var1}/{var2}/details','TestController@getItem');
Route::get('test/{id}/details','TestController@getDetails');

Route::get('test/{var1}/{var2}/details','TestController@item');
Route::get('test/{id}/details','TestController@details');

寻找更好的解决方法:)

答案 1 :(得分:0)

我没有太多的知识,但我认为它会做点什么......

Route::group(['prefix'=>'test'], function(){
    Route::get('/', function(){return "hi";});
    Route::get('/{id}', function($id){return "hi".$id;});
    Route::get('/{id}/{id2}', function($id, $id2){return "hi".$id.$id2;});
});

答案 2 :(得分:0)

从L5.2中删除

用于路由支持的隐式控制器。您可以使用RESTFul控制器来减少路由声明。