iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 22
1
Modern Web

30天成為Laravel萌新系列 第 22

30天成爲Laravel萌新(第21天) - 資源控制器(Resource Controller) 中篇

  • 分享至 

  • xImage
  •  

現在,要正式把控制器與資料庫連結起來。順便偷埋之後兩個主題☻。

引入所需使用的套件

首先,得先把之前建立好的Model引入。另外,我們在偷偷引入一個Illuminate\Support\Facades\Log

use Illuminate\Support\Facades\Log;
use App\BlogPost;
use Parsedown;

完成CRUD操作

Create / Store

    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]
        );
    }

可以透過Requestinput方法,取得POST來的資料,還可以補上預設參數。這邊取得標題與內容後,建立一個新的PostBlog實體存入資料庫。

Read / Show

    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 才會出現之前填入的內容。

Update

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()儲存資料。並且禁止修改不存在的資料。更新完後轉向顯示頁面。

Delete / Destroy

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()的部份也是之後才會談的內容,敬請期待。


上一篇
30天成爲Laravel萌新(第20天) - 資源控制器(Resource Controller) 上篇
下一篇
30天成爲Laravel萌新(第22天) - 資源控制器(Resource Controller) 下篇
系列文
30天成為Laravel萌新32
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言