Laravel 8: 在字符串上调用成员函数notify()
Laravel 8: Call to a member function notify() on string
我正在与 Laravel 8 合作创建一个论坛,现在我想向提出问题的用户发送通知,只要有人回答了该问题。
因此,为了做到这一点,我将其添加到控制器中:
public function postAnswer(Request $request, $question, $asker) {
$validate_data = $request->validate([
'answer' => 'required',
]);
$answer = Answer::create([
'answer' => $request->answer,
'user_id' => auth()->user()->id,
'question_id' => $question,
]);
$asker->notify(new RepliedToThread($question));
return back();
}
所以 $question
是问题 ID 而 $asker
是用户 ID已提问。
但现在我得到这个错误:
在字符串上调用成员函数 notify()
现在有趣的是,当我使用 auth()->user()->notify(new RepliedToThread($question));
时,它工作正常!
但我不想通知任何经过身份验证的用户,我需要通知提出问题的人,这就是我尝试传递 $asker
...
的原因
所以如果你知道如何解决这个问题,请告诉我...
非常感谢你们的任何想法或建议。
提前致谢。
Blade:
<form action="{{ route('questions.answers', ['question' => $show->id, 'asker' => $show->user->id]) }}" method="POST" enctype="multipart/form-data">
@csrf
<div class="mb-4">
<textarea name="answer" id="answer" class="form-control BSinaBold" rows="7" placeholder="Write down answer"></textarea>
@error('answer')
<div class="text-red-500 mt-2 text-sm">
{{ $message }}
</div>
@enderror
</div>
</br>
<button type="submit" class="btn btn-primary">Send</button>
</form>
根据您所说,问题是$asker
。此参数应该是来自 User
模型的实例,但错误表明它是字符串。
在您的表单中更改表单标签:
<form action="{{ route('questions.answers', ['question' => $show->id, 'asker' => $show->user]) }}" method="POST" enctype="multipart/form-data">
去掉user
后的id
。
问题是 asker
只是一个 id,你应该从用户 table 那里获取 asker
的其他信息,然后将你的通知传递给 asker
.
$asker = User::findOrFail($asker);
$asker->notify(new RepliedToThread($question));
确保您的 Answer.php
已 use Notifiable;
导入
ref link https://laravel.com/docs/8.x/notifications#using-the-notifiable-trait
那么只有您可以从 Answer
模型实例
调用 notify()
函数
问题是 $asker
只是一个字符串,它只是用户的 id
值。
我建议你使用 laravels 路由模型绑定。传递的参数 $querstion
和 $asker
会自动从数据库中查询。
https://laravel.com/docs/8.x/routing#route-model-binding
之后您可以正常访问问题ID,并且您拥有可通知的用户模型。
public function postAnswer(Request $request, Question $question, User $asker) {
$validate_data = $request->validate([
'answer' => 'required',
]);
$answer = Answer::create([
'answer' => $request->answer,
'user_id' => auth()->user()->id,
'question_id' => $question->id,
]);
$asker = User::find($asker);
$asker->notify(new RepliedToThread($question));
return back();
}
我正在与 Laravel 8 合作创建一个论坛,现在我想向提出问题的用户发送通知,只要有人回答了该问题。
因此,为了做到这一点,我将其添加到控制器中:
public function postAnswer(Request $request, $question, $asker) {
$validate_data = $request->validate([
'answer' => 'required',
]);
$answer = Answer::create([
'answer' => $request->answer,
'user_id' => auth()->user()->id,
'question_id' => $question,
]);
$asker->notify(new RepliedToThread($question));
return back();
}
所以 $question
是问题 ID 而 $asker
是用户 ID已提问。
但现在我得到这个错误:
在字符串上调用成员函数 notify()
现在有趣的是,当我使用 auth()->user()->notify(new RepliedToThread($question));
时,它工作正常!
但我不想通知任何经过身份验证的用户,我需要通知提出问题的人,这就是我尝试传递 $asker
...
所以如果你知道如何解决这个问题,请告诉我...
非常感谢你们的任何想法或建议。
提前致谢。
Blade:
<form action="{{ route('questions.answers', ['question' => $show->id, 'asker' => $show->user->id]) }}" method="POST" enctype="multipart/form-data">
@csrf
<div class="mb-4">
<textarea name="answer" id="answer" class="form-control BSinaBold" rows="7" placeholder="Write down answer"></textarea>
@error('answer')
<div class="text-red-500 mt-2 text-sm">
{{ $message }}
</div>
@enderror
</div>
</br>
<button type="submit" class="btn btn-primary">Send</button>
</form>
根据您所说,问题是$asker
。此参数应该是来自 User
模型的实例,但错误表明它是字符串。
在您的表单中更改表单标签:
<form action="{{ route('questions.answers', ['question' => $show->id, 'asker' => $show->user]) }}" method="POST" enctype="multipart/form-data">
去掉user
后的id
。
问题是 asker
只是一个 id,你应该从用户 table 那里获取 asker
的其他信息,然后将你的通知传递给 asker
.
$asker = User::findOrFail($asker);
$asker->notify(new RepliedToThread($question));
确保您的 Answer.php
已 use Notifiable;
导入
ref link https://laravel.com/docs/8.x/notifications#using-the-notifiable-trait
那么只有您可以从 Answer
模型实例
notify()
函数
问题是 $asker
只是一个字符串,它只是用户的 id
值。
我建议你使用 laravels 路由模型绑定。传递的参数 $querstion
和 $asker
会自动从数据库中查询。
https://laravel.com/docs/8.x/routing#route-model-binding
之后您可以正常访问问题ID,并且您拥有可通知的用户模型。
public function postAnswer(Request $request, Question $question, User $asker) {
$validate_data = $request->validate([
'answer' => 'required',
]);
$answer = Answer::create([
'answer' => $request->answer,
'user_id' => auth()->user()->id,
'question_id' => $question->id,
]);
$asker = User::find($asker);
$asker->notify(new RepliedToThread($question));
return back();
}