【问题标题】:How to pass default parameters to laravel controller in a get route如何在获取路由中将默认参数传递给 laravel 控制器
【发布时间】:2016-03-25 13:25:42
【问题描述】:

我有这样的路线:

Route::get('category/{id}/{date?}', array('as' => 'category/date', 'uses' => 'Controller@getCategory'));

我想在调用'/'根路由时使用默认参数运行@getCategory。因此,如果调用 '/' 路由,getCategory 函数应该以 id=1 和 date=2015-12-18 运行。

我该怎么做?

【问题讨论】:

    标签: laravel laravel-4 laravel-routing


    【解决方案1】:

    将其注册为单独的路由:

    Route::get('/', 'Controller@getCategory')->named('home');
    Route::get('category/{id}/{date?}', 'Controller@getCategory')->named('category/date');
    

    然后在您的控制器中,为这些参数设置默认值:

    public function getCategory($id = 1, $date = '2015-12-18')
    {
        // do your magic...
    }
    

    【讨论】:

    • 当然这是一种方法。但是有没有办法在一条路线而不是在控制器中做到这一点?
    • 我也想知道如何在路由中传递静态参数。在任何地方都找不到答案。 :(
    • 如果要根据路由模式使用不同的默认值,有什么解决办法?
    • 如何在没有 id 的情况下访问端点
    【解决方案2】:

    它适用于我在 路由 中使用 "?" {date?},并在 anonimus 函数中设置默认值。$date = null

    路线

    Route::get('category/{id}/{date?}', function($date = null) {
       if ($date === null)
          //Option 1
       else
          //Option 2    
    });
    

    【讨论】:

      【解决方案3】:

      路由,例如在我的情况下,我有 cmets 的多态关系

       Route::get('posts-comments/{commentable_id}', ['uses' => 'CommentController@fetchComments', 'commentable' => 'posts']);
      
       Route::get('video-comments/{commentable_id}', ['uses' => 'CommentController@fetchComments', 'commentable' => 'videos']);
      

      然后在控制器中:

       public function fetchComments(Request $request, commentable_id)
        {
          $commentable = $request->route()->getAction()['commentable'];
        }
      

      我希望这能回答你的问题

      【讨论】:

        【解决方案4】:

        首先,请原谅我的英文写作不好。 回答 emotionalRobert 的问题: 我们可以在 routes/web.php 中使用一个类 然后在控制器中使用它,例如:

        Routes/web.php

        class SomeVars {
            public $var1 = 'en';
            public $var2 = 'fr';
        }   
        Route::get('/localization/{vars}','LocalizationController@index');
        

        LocalizationController.php

        <?php
        namespace App\Http\Controllers;
        use Illuminate\Http\Request;
        use App\Http\Requests;
        use App\Http\Controllers\Controller;
        use SomeVars;
        class LocalizationController extends Controller {
            public function index(Request $request, SomeVars $vars) {
                echo $vars->var1;
                echo $vars->var2;
            }
        }   
        

        现在,如果您浏览:someSite/localization/anything 看到这个结果:

        zh 来自


        如果你在你的控制器的 all 方法中需要这个类,你可以这样使用:

        Routes/web.php

        class SomeVars {
            public $var1 = 'en';
            public $var2 = 'fr';
        }   
        Route::get('/localization','LocalizationController@index');
        

        LocalizationController.php

        <?php
        namespace App\Http\Controllers;
        use Illuminate\Http\Request;
        use App\Http\Requests;
        use App\Http\Controllers\Controller;
        use SomeVars;
        class LocalizationController extends Controller {
            public $vars;
            public function __construct(SomeVars $vars){
                $this->vars = $vars;
                
            }
            public function index(Request $request) {
                echo $this->vars->var1;
                echo "<br>";
                echo $this->vars->var2;
            }
        }           
        

        现在,如果您可以在浏览器中使用此地址:someSite/localization 可以再次看到这个结果:

        zh 来自

        希望对你有帮助,谢谢,希望上帝

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-05-16
          • 2017-01-12
          • 1970-01-01
          • 2015-10-30
          • 2012-09-20
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多