公司導入 Laravel 分享 - 1. 介紹

公司 2017 年導入 Laravel 時的分享文章,雖然是好幾年前的事情,但文章捨不得刪,畢竟也花不少時間撰寫,就慢慢整理新增上來,算是做個紀念。

一、MVC

Laravel MVC 大致的流程是
  1. 使用者輸入網址
  2. 根據 Route 判段要導到哪個 Controller
  3. 如果有需要存取資料庫 Controller 會和 Model 索取資料
  4. 最後把相關資料顯示在 View 上回傳給使用者看到

1. Route

Route::get('post/{id}', 'PostController@show');
表示我們在網址輸入 XXX.com.tw/post/2,PostController 裡的 show 會被執行。

2. Controller

namespace App\Http\Controllers;

use App\Post;
use App\Http\Controllers\Controller;

class PostController extends Controller
{
    public function show($id)
    {
        return view('post.show', ['post' => Post::findOrFail($id)]);
    }
}
從這裡我們可以看到 show 回傳了一個 View,並且把 post 的相關資料傳給 View 做顯示。
post 的資料透過 Post Model 去資料庫讀取。

3. View

<!DOCTYPE html>
<html>
<head>
    <title>文章</title>
</head>
<body>
    <table>
        <tr>
            <td>標題</td>
            <td>{{ $post->title }}</td>
        </tr>
        <tr>
            <td>內容</td>
            <td>{{ $post->content }}</td>
        </tr>
    </table>
</body>
</html>

二、RESTful

寫程式最常用到的就是資料庫的 CRUD,Laravel 將基本的資料庫操作搭配不同的傳輸方式組成了七總不同的行為和方法。
※特別說明,聽說 HTML 的 form 只支援 POST 和 GET 兩種傳輸方式,所以其他的是用模擬的。表單裡面要藏 <input name="_method" type="hidden" value="PUT"> 讓 Laravel 知道我們要使用 PUT 方法。
方法 路徑 行為 路由名稱
GET /post index post.index
GET /post/create create post.create
POST /post store post.store
GET /post/{post} show post.show
GET /post/{post}/edit edit post.edit
PUT/PATCH /post/{post} update post.update
DELETE /post/{post} destroy post.destroy

三、ajax

基本 Route 和 Controller 的觀念都一樣,差別在於 return 的東西不同,我們不需要 return View,可以回傳 json、string。
可以回傳的東西可參考:https://laravel.com/docs/5.4/responses

四、資料庫介紹

1. 設定

'mysql' => [
    'driver' => 'mysql',
    'host' => env('DB_HOST', 'localhost'),
    'port' => env('DB_PORT', '3306'),
    'database' => env('DB_DATABASE', 'forge'),
    'username' => env('DB_USERNAME', 'forge'),
    'password' => env('DB_PASSWORD', ''),
    'charset' => 'utf8',
    'collation' => 'utf8_unicode_ci',
    'prefix' => '',
    'strict' => true,
    'engine' => null,
],

2. 使用 Model 進行資料查詢

namespace App;

use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    protected $fillable = [
        'title',
        'content',
        'excerpt',
        'status',
    ];
}
抓取 id>3 的 post。
$posts = Post::where('id', '>', 3)->get();
抓取 id>3 的 post 和 category。
$post = Post::with('category')->where('id', '>', 3)->get();

留言