使用 route() 时 Laravel 刀片“未定义变量”错误

Posted

技术标签:

【中文标题】使用 route() 时 Laravel 刀片“未定义变量”错误【英文标题】:Laravel blade "undefined variable" error when using route() 【发布时间】:2019-12-31 18:47:11 【问题描述】:

作为一个项目,我正在构建一个类似论坛的 ***。在显示单个问题的页面上,我希望用户能够单击提问者的姓名并被转发到相应的用户个人资料页面。我可以使用 $question->user->name 从数据库中获取名称。添加<a href=""></a>部分时出现问题!

此外,个人资料页面也可以使用。我可以访问它们,然后 URL 会显示例如:../profile/1

这是web.php文件中的路由:

Route::get('/profile/user', 'PageController@profile')->name('profile');

这是 PageController 部分:

public function profile($id)
    
      $user = User::with(['questions', 'answers', 'answers.question'])->find($id);
      return view('profile')->with('user', $user);
    

这是 show.blade 查看问题页面中不起作用的代码:

<p>
    Submitted by <a href=" route('profile', $user->id) "> $question->user->name </a>
</p>

我收到的错误消息是Undefined variable: user

这让我感到惊讶,因为在个人资料页面上转发特定问题可以使用此刀片代码:

<a href=" route('questions.show', $question->id) ">View Question</a>

web.php文件中各自的路由:

Route::resource('questions', 'QuestionController');

问题控制器:

public function show($id)
    
      $question = Question::findOrFail($id); 

      return view('questions.show')->with('question', $question);
    

我以为我在 PageController 中定义了变量 $user,就像我在 QuestionController 中定义 $question 一样?

【问题讨论】:

我在您的QuestionController@show 中没有看到任何$user。用户仅在PageController@profile 有时使用类似 route('questions.show', ['id'=>$question->id]) 【参考方案1】:

我可以看到您正在使用具有关系的 Eloquent 模型。如果要在问题上显示用户id,可以使用QuestionUser之间的关系来查找发帖用户的id。

Submitted by <a href=" route('profile', $question->user->id) "> $question->user->name </a>
                                          ^^^^^^^^^

【讨论】:

【参考方案2】:
//just change  your  like this way

 public function profile($id)

  $user = User::with(['questions', 'answers', 'answers.question'])->find($id);
  return view('profile',compact('user));

【讨论】:

以上是关于使用 route() 时 Laravel 刀片“未定义变量”错误的主要内容,如果未能解决你的问题,请参考以下文章

刀片视图中的laravel未定义变量

使用 laravel 和刀片正确分配带有 route(function) 和参数的 img src

FP_route 上的 Laravel Route 未定义错误

Laravel Route 未传递对象

刀片未在视图上显示消息

刀片中的 Laravel 8 路线