拉拉维尔路线传递变量到控制器

2022-08-31 00:30:59

如何将硬编码变量传递到控制器?

我的路线是:

Route::group(array('prefix' => $locale), function() {
    Route::get('/milk', array('as' => 'milk', 'uses' => 'ProductsController@index'));
});

我想做这样的事情:

Route::get('/milk', array('as' => 'milk', 'uses' => 'ProductsController@index(1)'));

但这行不通。

如何做到这一点?


对不起,如果我没有解释好。

我希望简单地对某些路由 type_id进行硬编码(由我一成不变地设置),如下所示:

Route::get('/milk', array('as' => 'milk', 'uses' => 'ProductsController@index(1)'));
Route::get('/cheese', array('as' => 'cheese', 'uses' => 'ProductsController@index(2)'));
...

我的产品控制器供参考:

class ProductsController extends BaseController {

    public function index($type_id) {
        $Products = new Products;
        $products = $Products->where('type_id', $type_id)->get();
        return View::make('products.products', array('products' => $products));
    }

}

答案 1

您可以对路由使用闭包,然后调用控制器操作:

Route::get('/milk', array('as' => 'milk', function(){
    return App::make('ProductsController')->index(1);
}));

但是,更好的方法是使用条件,然后在控制器中执行类型到 id 的转换。但是,您将丢失直接别名,并且在生成URL时必须将产品作为参数传入。where

Route::get('{product}', array('as' => 'product', 'uses' => 'ProductsController@index'))
    ->where('product', '(milk|cheese)');

答案 2

我用它来将值传递给控制器...

路线:

Route::get('user/{user}/usermanage',  array('as' => 'userdata.usermanage',       'uses' => 'yourController@getUserDetails'));
//{user} - holds some value...

在控制器中:

public function getUserDetails($id)
{
    ...
}

如果想要动态:

$var    =   "Lists"; 

Route::get('something',        array('as' => 'something',      'uses' => 'yourController@get'.$var));

希望这有帮助...


推荐