我试着用这些来保存我的评论:
class Comment extends Model
{
public function commentable()
{
return $this->morphTo();
}
}和
class Review extends Model
{
public function comments()
{
return $this->morphMany(Comment::class, 'commentable');
}
}路线:
Route::get('/reviews', 'front\ReviewController@Holder')->name('ReviewHolder');
Route::get('/reviews/{slug}', 'front\ReviewController@index')->name('Review');
Route::post('/reviews', 'front\ReviewController@Sendcm')->name('SendComment');我的控制器:
class ReviewController extends Controller
{
public function Holder(){
$reviews = Review::latest()->with('partners')->paginate(6);
return view('front.review.holder.main', compact('reviews'));
}
public function index($slug){
$item = Review::where('slug','=', $slug)->with('partners')->first();
return view('front.review.main.main',compact('item'));
}
public function Sendcm(Request $request){
$review = Review::find($id);
$comment = new Comment;
$comment->name = $request->name;
$comment->email = $request->email;
$comment->body = $request->body;
$review->comments()->save($comment);
return redirect()->back();
}
}但我无法保存注释并向我显示错误
未定义变量: id
如何从我的刀片中找到id和模型,或者以另一种方式保存注释?我试着:
public function Sendcm(Request $request, $slug){
$review = Review::find($slug);
$comment = new Comment;
.
.
.}但错误是:
函数App\Http\Controllers\front\ReviewController::Sendcm(),1传递的
参数太少,而预期的
值正好是2
发布于 2019-11-22 17:10:49
在Controller中,我将上面的答案稍微更改为:
public function Sendcm(Request $request, $slug){
$review = Review::find($slug);
$comment = new Comment;
$comment->name = $request->name;
$comment->email = $request->email;
$comment->body = $request->body;
$review->comments()->save($comment);
return redirect()->back();
}和
{!! Form::open(['url' => route('send_comment', $item->id), 'method' => 'POST']) !!}以及通往下列地点的路线:
Route::post('/reviews/{review}', 'front\ReviewController@Sendcm')->name('send_comment');A现在它正在工作,但在注释表中没有“App\”保存commentable_type
发布于 2019-11-22 13:39:56
未定义变量$id是因为函数不知道$id来自何处。一个选项是将review模型作为第二个参数注入,如下所示:
public function Sendcm(Request $request, Review $review){
$review = Review::find($slug); //you can get rid of this.
$comment = new Comment;
.
}然后按如下方式更新您的路线:
Route::post('/reviews/{review}', 'front\ReviewController@Sendcm')->name('SendComment');Laravel将自动为您提供与您发布的id相关的审查模型。
第二个示例中的错误是因为您没有更新路由以接受第二个参数。您本可以通过如下方式更新您的路由来避免此错误:
Route::post('/reviews/{slug}', 'front\ReviewController@Sendcm')->name('SendComment');另外,最好遵循PSR标准和Laravel的命名约定。在这方面,最好在命名路线时使用带有点符号的蛇案例。所以,SendComment比reviews.send_comment更好
https://stackoverflow.com/questions/58994921
复制相似问题