【问题标题】:If Condition in Laravel Routes FileLaravel 路由文件中的 If 条件
【发布时间】:2016-10-01 17:39:47
【问题描述】:

有没有办法在 Laravel 5 的 routes.php 文件中添加 if 语句?我已经尝试过了,但不起作用:

Route::get('/', function()
 {
   if ( Auth::user() )
     Route::get('/', 'PagesController@logged_in_index');
   else
     Route::get('/', 'PagesController@guest_index');
   endif
 });

我希望这种方式可行。谢谢。

【问题讨论】:

    标签: laravel laravel-5


    【解决方案1】:

    您最初需要使用 Route::group 而不是 Route::get -

    Route::group(['prefix' => '/'], function()
    {
        if ( Auth::check() ) // use Auth::check instead of Auth::user
        {
            Route::get('/', 'PagesController@logged_in_index');
        } else{
            Route::get('/', 'PagesController@guest_index');
        }
    });
    

    但是您可能想要做的是摆脱路由文件中的条件,并将其放在通用索引方法 - PagesController@index 中。特别是如果 URL 在两条路由之间保持不变。

    public function index()
    {
        return Auth::check()
            ? View::make('pages.logged-in-page')
            : View::make('pages.not-logged-in-page');
    }
    

    当然,这取决于你认为哪种方式更好。

    【讨论】:

    • 嗨。感谢您的回复。当我使用 Routes 答案时,我收到此错误:Argument 1 passed to Illuminate\Routing\Router::group() must be an instance of array, string given
    • 这是一个艰难的@damnkid。尽管我已登录,但它现在默认为 guest_index。我猜路由无法判断是否有人登录。它假定我仍然是访客。
    • 你使用的是 Auth::user() 还是 Auth::check()?
    • 坚持使用 Auth::check - 它严格返回一个布尔值。 Auth::user 返回用户模型(如果已登录),即使您已登录,它也可能评估为 false。
    【解决方案2】:

    你应该使用 check() 而不是 user()

    它在 laravel 5 中工作。我已经检查过了

     Route::get('/', function(){
            if (Auth::check())
            {
                Route::get('/', 'PagesController@logged_in_index');
            } else {
                Route::get('/', 'PagesController@guest_index');
            }
        });
    

    您做错的其他事情是 if/else endif 的语法。

    【讨论】:

    • 感谢大家一直以来的支持,但这可能是我的设置有问题,因为没有任何效果。我会弄清楚这一点,然后更新这个问题。
    • 我正在寻求解决同样的问题。 Auth::check() 在 L5.1 的路由器中不起作用。当您具有相同的 url 但基于登录的控制器不同时,中间件也不起作用。还有其他解决方案吗?
    【解决方案3】:

    你可以用这个

    if (Auth::check()){
        Route::get('/', 'PagesController@logged_in_index');
    } 
    else {
        Route::get('/', 'PagesController@guest_index');
    }
    

    在 Laravel 5.3.* 中它可以工作。它对我有用,所以我认为它应该对你有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-06
      • 2020-08-23
      • 2021-09-30
      • 2015-11-17
      • 2020-12-02
      • 1970-01-01
      • 1970-01-01
      • 2020-07-30
      相关资源
      最近更新 更多