【问题标题】:URL is not getting username from route in Laravel 5URL 没有从 Laravel 5 中的路由获取用户名
【发布时间】:2019-08-01 12:22:58
【问题描述】:

我正在尝试通过 URL:domian.com/author/page/{username} 显示作者页面。

路线如下:

Route::get('author/page/{username}', 'FrontendAuthorController@index');

这里是控制器(FrontendAuthorController@index):

public function index($username)
{
    $user = BasicInfo::where('username', $username)->first(); 

    //'username' is a field of BasicInfo Model. 
    //BasicInfo belongs to User model. 
    //So, we can get user id by $user->user_id according to eloquent rule. 

    $author = User::findOrFail($user->user_id);

    return view('frontend.author', compact('author'));
}

但我看到这条消息

抱歉,找不到您要查找的页面。

如果我尝试使用这条路线domian.com/author/page/{username}/{id} 和这个参数function index($username, $id) 来获取视图,那么我就会得到视图!我不想在 route/url 中显示 id。我该如何解决这个问题?

【问题讨论】:

  • 好吧,您正在使用 findOrFail 查询 User 模型,所以看起来它确实失败了。如果您发送dd($user->user_id),那么您可能会获得更多信息。
  • 可以分享一下表结构吗
  • @LinusJuhlin 我试图通过 dd($user->user_id) 获取价值,但每当输入 url 时,它都会直接显示找不到页面的消息。也许他们没有得到路由,所以控制器没有执行。
  • @Manojkiran.A BasicInfo 模型包含-> 'user_id'、'user_image'、'user_cover_image'、'first_name'、'last_name'、'display_name'、'username'、'dob'、'传记',用户模型包含-->'电子邮件','密码',
  • 你检查$username和$user的值了吗?

标签: laravel laravel-5 eloquent


【解决方案1】:

给路线命名

Route::get('author/page/{username}', 'FrontendAuthorController@index')->name('author_page');

然后检查路线:

php 工匠路线:列表

使用以下功能进行测试:

public function index(Request $request,$username)
{
   return response($username);
}

然后更新,

public function index($username)
{
    if(isset($username)){
       $user = BasicInfo::where('username', $username)->first(); 
       if($user){
           $author = User::findOrFail($user->user_id);
           return view('frontend.author', compact('author'));
       }else{
          // user not found , redirect to home page or 404
         abort(404);
       }
    }else{
          // $username not set , redirect to home page or 404
          abort(404);
    }
}

【讨论】:

  • 谢谢,但是路由没有到达控制器。在从控制器执行任何操作之前显示 404 错误!
  • 确保在控制器的构造函数和访问索引路由中没有添加中间件
  • 是的。控制器构造函数中没有中间件。
  • 这怎么可能return redirect('/404') 它不会工作abort(404); 会工作
【解决方案2】:

我在您的代码中没有发现任何错误。

我的猜测是,您发布的route 上方有一个route 使用相同的网址,或者您使用的resourceful route 也使用相同的网址。

【讨论】:

    【解决方案3】:

    据我了解您的问题,您需要以下路线才能工作:-

    domian.com/author/page/{username}
    domian.com/author/page/{username}/{id}
    

    第一个不适合你,但如果你添加function index($username, $id),第二个可以工作

    按照下面的解决方案它会起作用,或者你:-

    将您的路线转换为

    Route::get('author/page/{username}/{id?}', 'FrontendAuthorController@index');
    

    这表明您的路线应该有author name,也可以有作者的id。 Id 是选项,如果你不提供它仍然可以工作。

    根据上面的方法,也可以在函数参数中添加 $id:-

    function index($username, $id)
    

    使用此解决方案,以下两个网址都可以使用

    domian.com/author/page/rakesh
    domian.com/author/page/rakesh/1
    

    【讨论】:

    • @MosharofZitu 你能发布你如何定义路由然后运行,需要检查缺少的组件
    • 那么你可能有一些冲突的路线
    猜你喜欢
    • 2016-06-15
    • 2014-08-26
    • 1970-01-01
    • 2020-04-11
    • 2015-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多