【问题标题】:Laravel 4 routing parametersLaravel 4 路由参数
【发布时间】:2014-01-10 12:45:53
【问题描述】:

我是 Laravel 的新手,到目前为止我真的很喜欢它。我正在使用 L4,希望在路由方面得到一些帮助,我仍在努力解决这个问题。

我想要 uri domain.com/{username} 我可以得到 domain.com/{user_id} 并且 Laravel 会查找用户,但我似乎无法使用用户名作为参数。

编辑:

我正在使用模型进行用户路由

Route::model('user', 'User');

然后尝试路由

Route::get('/{user}', 'sampleController@viewUser');

还要注意,它是在所有其他路线之后

提前致谢!

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    您好,欢迎来到 Laravel!

    你可以使用这个路由注册。

    Route::get('{username}', function($username){
        $user = User::whereUsername($username)->fist();
        if (! is_null($user)) {
            return View::make('profile', compact('user'));
        }
    });
    

    ...但是如果您转到 mysite.com/blogmysite.com/contact 或其他任何内容,此 URL 将被先前的模式捕获。
    其实没问题,注册blog/contact/whatever route就可以了,像这样!

    Route::get('blog', function(){
        return 'blog page';
    });
    
    Route::get('contact', function(){
        return 'contact page';
    });
    
    // To have username in URL discard Route::model call and add this
    Route::get('{username}', function($username){
        $user = User::whereUsername($username)->fist();
        if (! is_null($user)) {
            return View::make('profile', compact('user'));
        }
    });
    

    【讨论】:

    • 那么有没有办法只在URL中有用户名?当然,它可能只是为了外观,但如果其他网站可以做到,我们为什么不能呢?
    • 当然有,但没有路由-模型绑定。我会再编辑一次答案
    【解决方案2】:

    你可以在没有 Route::model 的情况下尝试这个

    Route::get('user/{username}', function($username)
    {
    
        $user = User::where('username',$username)->first();
    })
    ->where('name', '[A-Za-z]+');
    

    【讨论】:

      【解决方案3】:

      更好的是,你可以使用Route::bind():

      Route::bind('user', function($value, $route)
      {
          return User::whereUsername($value)->first();
      });
      

      现在,您无需在路由定义中手动调用即可访问该用户:

      Route::get('{user}', function(User $user){
          if (!is_null($user)) {
              return View::make('profile', compact('user'));
          }
      });
      

      这将适用于您定义的所有使用{user} 参数的路由。

      【讨论】:

        猜你喜欢
        • 2013-11-24
        • 2014-10-13
        • 2014-08-10
        • 2013-10-16
        • 2014-09-24
        • 2013-09-14
        • 2014-06-08
        • 2016-03-05
        相关资源
        最近更新 更多