У меня есть этот код для создания записи, но я не понимаю, почему ключевое слово return типа "return $request->uploadImage()->storePost();
" необходимо для отображения объекта записи с использованием метода show()
с "dd(Posst::find($id));
". Потому что без возврата, используя только «$request->uploadImage()->storePost();
», вы увидите пустую страницу, а не объект post. Знаете ли вы, почему возврат необходим в этом контексте?
Также в классе PostRequest есть эта часть для установки свойства file_name объекта PostRequest:
$this->file_name = str_slug($this->title). '.' . $uploadedImage->getClientOriginalExtension();
Но у класса PostRequest свойство file_name не объявлено, но оно работает, поэтому можно задавать свойства объекта без предварительного их объявления?
В PostController:
public function store(CreatePostRequest $request)
{
return $request->uploadImage()->storePost();
}
public function show($id)
{
dd(Post::find($id));
}
В CreatePostRequest есть два метода:
public function uploadImage(){
$uploadedImage = $this->image;
$this->file_name = str_slug($this->title). '.' . $uploadedImage->getClientOriginalExtension();
$uploadedImage->storePubliclyAs('post', $this->file_name);
return $this;
}
public function storePost(){
$post = Post::create([
'title' => $this->title,
'content' => $this->content,
'image_url' => 'posts/' . $this->file_name,
]);
session()->flash('success', 'Post created');
return redirect()->route('post.show', $post->id);
}