又LAG隨性筆記
  • 關於我
  • 作品集
  • 生活隨筆
  • 與我聯絡
  • 隨手扎

隨手扎

October 9, 2019

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

最終,我決定將index()和destroy()另外寫。一個是寫完create()和edit(),destroy()也就不怎麼難。但是index()意外也能有豐富內容能寫…(加上有另一種用法我還不太會)

總體來說,這篇程式還是有些趕工粗糙….

重點觀念

  • @method的使用 相當於隱藏欄位_method。
  • @csrf的使用

建立頁面模板

同樣的,先建立一個編輯頁面的模板resource/views/blog/edit.blade.php:

@extends("base",['title'=>'編輯文章'])

@section('title', '編輯文章')


@section('body')
    <form method="post" action="{{($type=="edit") ?
                    route("blog/post.update", ["id"=>$id]) :
                    route("blog/post.store")}}">
        @csrf
        @method(($type=="edit")? "patch" : "post")

        <label for="title">標題:</label>
        <input name="title" type="text" value="{{$title}}" id="title" />
        <br/>
        <label for="content">內容:</label>
        <textarea cols="30" id="content" name="content" rows="10">{{$content}}</textarea>
        <br/>
        <input name="" type="submit" value="儲存"/>
    </form>
@endsection
October 8, 2019

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

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

引入所需使用的套件

首先,得先把之前建立好的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]
        );
    }

可以透過Request的input方法,取得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 才會出現之前填入的內容。

October 7, 2019

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

CRUD & RESTful

所謂CRUD是Create、Read、Update、Delete。昨天已經從資料庫模型(Model)的角度看過基本操作了,今天要將些操作加入到控制器(Controller)。

C | Create
R | Read
U | Update
D | Delete

另外,還需要另外知道的一件事情是RESTful。RESTful並不是硬性規定,只是一種在HTTP請求上的一種慣例設計。通常HTTP請求方法有GET、POST、PUT、DELETE、PATCH,以及HEAD、CONNECT、OPTIONS、TRACE。以下節錄自MDN:

GET
GET 方法請求展示指定資源。使用 GET 的請求只應用於取得資料。
HEAD
HEAD 方法請求與 GET 方法相同的回應,但它沒有回應主體(response body)。
POST
POST 方法用於提交指定資源的實體,通常會改變伺服器的狀態或副作用(side effect)。
PUT
PUT 方法會取代指定資源所酬載請求(request payload)的所有表現。
DELETE
DELETE 方法會刪除指定資源.
CONNECT
CONNECT 方法會和指定資源標明的伺服器之間,建立隧道(tunnel)。
OPTIONS
OPTIONS 方法描述指定資源的溝通方法(communication option)。
TRACE
TRACE 方法會與指定資源標明的伺服器之間,執行迴路返回測試(loop-back test)。
PATCH
PATCH 方法套用指定資源的部份修改。

其實也就差不多對應了CRUD的操作:

CRUDRESTful
CreatePOST / PUT
ReadGET
UpdatePATCH / PUT
DeleteDelete
October 6, 2019

30天成爲Laravel萌新(第19天) - Model的基本操作

ORM是物件關聯對映(Object Relational Mapping)。在Larvel裡提供的 Eloquent ORM能讓開發者以一個簡單、美觀的方式操作關聯式資料庫。今天就來寫一點點基本的操作,更多可以查看文件,以及Laravel資料庫相關文件。

Select All

在SQL,可能會用SELECT * FROM <TABLE>;來取得所有資料,儘管在資料量龐大時,這樣操作並不好,但是Laravel同樣有對應的操作:

use \App\BlogPost

$posts = App\BlogPost::all();

foreach ($posts as $post) {
    echo $post->title;
}

條件查詢Where

條件查詢也非常長使用到:

$post = App\BlogPost::where('id', 1)->get();
               // ->orderBy('name', 'desc') // 還可以加以設定以下參數
               // ->take(10)
               // ->get();

用where自然很容易從SQL轉換了解。不過,Laravel有更簡單的方式針對主鍵做查詢:

$post = App\BlogPost::find(1);

// 等同於

$post = App\BlogPost::where('active', 1)->first();
October 5, 2019

30天成爲Laravel萌新(第18天) - 建立Model

前幾天建立了Blog Post在資料庫的Schema,並且遷移(Migration)進資料庫,建立相關的資料表(blog_post)。為了讓Larave提供的ORM系統,以一個美觀、簡易的方式操作資料庫,還得建立BlogPost Model類別。

當然也可以使用artisan建立一個樣板:

artisan make:model BlogPost

然後會有app/BlogPost.php的檔案

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class BlogPost extends Model
{
    //
}

這次,只需要簡單改成下面的樣子就好:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class BlogPost extends Model
{
    protected $table = "blog_post";
    // protected $primaryKey = 'id';
    // public $timestamps = false;
}
October 4, 2019

30天成爲Laravel萌新(第17天) - 資料庫管理工具(下)‧使用DBeaver

今天要在介紹一個,我用過後就喜歡上的資料庫管理工具–DBeaver。

DBeaver的兩個版本

DBeaver Download Page

DBeaver有社區版和企業版兩種。社區版可以免費使用,並且跨平台,透過JDBC支援多種資料庫。此外還會自動檢測資料庫版本,自動尋找相對應的Drive。

我手動配置過phpMyAdmin過。同樣直接下載安裝的情況下,DBeaver簡單好多。

界面

DBeaver的界面很漂亮,我還蠻喜歡的。其中還有一個功能測試時非常好用–產生假資料。這個和前幾天亂數短文很像,不過DBeaver會針對欄位型態產生資料。資料庫測試的模擬數據生成(Mock Data Generation)也有一些限制,有些資料類型還是無法產生。

連線資料庫並填入資料

說了這麼多,相信已經下載安裝好了吧?該像昨天一樣,來連接資料庫,並塞入文章吧!

  • ««
  • «
  • 1
  • 2
  • 3
  •  … 
  • 28
  • 29
  • 30
  •  … 
  • 34
  • »
  • »»
© 又LAG隨性筆記 2025