ハードコードされた変数をコントローラーに渡すにはどうすればよいですか?
私のルートは:
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)'));
...
参照用の私のProductsController:
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));
}
}
ルートにクロージャーを使用して、コントローラーアクションを呼び出すことができます。
Route::get('/milk', array('as' => 'milk', function(){
return App::make('ProductsController')->index(1);
}));
ただし、より良い方法は、where
条件を使用してから、コントローラーでtype-to-id変換を行うことです。ただし、直接エイリアスは失われ、URLの生成時に製品としてパラメーターを渡す必要があります。
Route::get('{product}', array('as' => 'product', 'uses' => 'ProductsController@index'))
->where('product', '(milk|cheese)');
これを使用して、コントローラーに値を渡しました...
ルート:
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));
お役に立てれば...
これを行うための最もきちんとした方法は、おそらく ルートの制約 であると感じています
Route::get('{milk}', [ 'as' => 'milk', 'uses' => 'ProductsController@index' ])
->where('milk', 'milk'); // matches the named arg {milk} (param 1)
// to the regex literal 'milk' (param 2)
ある程度の冗長性がありますが、もしあなたがあなたのルートから純粋にそれをしたいなら、私はこれで行きます。
ただし、SEOフレンドリ名を作成するには、 Sluggable を使用して各製品に一意のスラッグを生成し、次のルートを作成できます。
Route::get('{product}', [ 'as' => 'product', 'before' => 'product-slug', 'uses' => 'ProductsController@index' ])
->where('product', '[a-z0-9]+[a-z0-9\-]*'); // valid slug syntax
そして、このフィルター:
Route::filter('product-slug', function($route) {
$slug = $route->getParameter( 'slug' );
if (is_numeric($slug)) { // if the slug is an ID
$product = Product::findOrFail($slug); // try to find the product
return Redirect::route('product', $product->slug); // and redirect to it
}
});
URLを台無しにせずに実際に行う方法は次のとおりです。
ルートを定義:
_Route::match(['GET', 'POST'], 'my-url', ['var_1'=>'hello', 'var_2'=>'world', 'prefix'=>'my-prefix', 'middleware'=>['web', 'mid2', 'mid3'], 'as'=>"my-route-name", 'uses'=>'myController@index']);
_
コントローラーのfunction __construct(Request $request)
内:
_$req_action = @$request->route()->getAction();
$var_1 = $var_2 = '';
if(is_array($req_action) && !empty($req_action['var_1'])){
$var_1 = (int)@$req_action['var_1'];
}
if(is_array($req_action) && !empty($req_action['var_2'])){
$var_2 = @$req_action['var_2'];
}
_