Я начал кодировать новый сайт, что-то вроде электронной коммерции, но это просто обзорный сайт, на котором пользователь комментирует бренды, продукты и сообщения брендов.Итак, у меня есть полиморфная таблица для комментариев.
Когда кто-то пытается добавить комментарий, сначала мне нужно определить тип комментария, например, Бренд, Продукт или Сообщение.В этом случае я использую переключатель, чтобы узнать, что пользователь хочет сделать.Я думаю, что был бы лучший способ сделать это с чистой структурой кода, поэтому я здесь.
Я просто хочу знать, если это правильный способ добавить комментарий, как показано ниже.
public function addComment(Request $request, $type, $id, $tab = null)
{
// Error messages
$messages = [
'add_comment.required' => '...',
'add_comment.min' => '...',
'add_comment.max' => '...',
'rating.numeric' => '...',
'rating.min' => '...',
'rating.max' => '...'
];
// Validate the form data
$validator = Validator::make($request->all(), [
'add_comment' => 'required|min:5|max:2000',
'rating' => 'numeric|min:0|max:5'
], $messages);
if($validator->fails())
{
return back()->withErrors($validator);
} else {
$comment = new Comment;
$comment->body = $request->get('add_comment');
$comment->user()->associate(Auth::user()->id);
$comment->star_value = $request->get('rating');
switch ($type) {
case 'Post':
$post = Post::findOrFail($id);
$comment->star_value = NULL;
$post->comments()->save($comment);
break;
case 'Product':
$product = Product::findOrFail($id);
$product->comments()->save($comment);
//Update rating of product
$average = $product->comments()->getAvg();
$product->rating = $average;
$product->save();
break;
default:
$this->postCommentToBrand($comment, $id, $tab);
break;
}
return redirect()->back();
}
}
$ request = inputs
$ type = commentable_type (Бренд, Продукт, Почта)
$ id = id $ type
$ tab = Это на самом деле для бренда,Потому что у бренда есть поддержка клиентов и техническая поддержка.Нужно определить его и с помощью регистра переключателя.