現在,要正式把控制器與資料庫連結起來。順便偷埋之後兩個主題☻。
首先,得先把之前建立好的Model引入。另外,我們在偷偷引入一個Illuminate\Support\Facades\Log
。
use Illuminate\Support\Facades\Log;
use App\BlogPost;
use Parsedown;
public function store(Request $request)
{
$title = $request->input("titile", "未命名文章");
$content = $request->input("content");
$post = new BlogPost;
$post->title = $title;
$post->content = $content;
$post->save();
Log::info("Store New Blog Post: id = $post->id");
return redirect()->action(
'Blog\PostController@show', ['id' => $post->id]
);
}
可以透過Request
的input
方法,取得POST來的資料,還可以補上預設參數。這邊取得標題與內容後,建立一個新的PostBlog
實體存入資料庫。
public function show($id){
$post = BlogPost::find($id);
if(! $post){
abort(404);
}
$content = $post->content;
{
$Parsedown = new Parsedown();
$content = $Parsedown->text($content);
}
return view("blog.post", [
"title" => $post->titile,
"content" => $content,
]);
}
讀取與之前控制器的內容差不多。不同的是,需要先從資料庫尋找資料,如果找不到就回傳404找不到錯誤頁面。之後會對該頁面進行修改。現在http://localhost/blog/post/12 將會顯示404錯誤頁面,只有http://localhost/blog/post/1 才會出現之前填入的內容。
public function update(Request $request, $id)
{
$post = BlogPost::find($id);
if(! $post){
abort(403);
}
$title = $request->input("title", "未命名文章");
$content = $request->input("content");
$post->title = $title;
$post->content = $content;
$post->update();
Log::info("Update Blog Post, the id is $id");
return redirect()->action(
'PostController@show', ['id' => $id]
);
}
Update行為與Create行為也很像,但改成用update()
儲存資料。並且禁止修改不存在的資料。更新完後轉向顯示頁面。
public function destroy($id)
{
$post = BlogPost::find($id);
if(! $post){
abort(403);
}
$post->delete();
Log::info("Delete Blog Post, the id is $id");
return redirect()->action('Blog\PostController@index');
}
刪除恐怕是四個行為中最為簡單的。大可不去檢查文章在不在。像是使用之前提過的BlogPost::destroy($id);
,連find($id)
都不需要。
還沒有實做index()
、create()
、edit()
。因為這些行為與頁面有關,明天在繼續說。
另外,上面redirect()
的用法並不打算多說,可以自行參考文件,Routing也有相關內容。
除了錯誤頁面外,Log::info()
的部份也是之後才會談的內容,敬請期待。