- 建立控制器
php artisan make:controller 控制器名稱
php artisan make:controller SitesController
- 建立模型 model
php artisan make:model 模型名稱
php artisan make:model User
- 建立數據表
php artisan make:migration create_表名_table --create=表名 php artisan make:migration create_tasks_table --create=tasks // 建立 migration 文件
php artisan migrate //執行建立指令
- 添加數據表字段名
php artisan make:migration add_字段名_column_to_表名 --table=表名 php artisan make:migration add_intro_column_to_tasks --table=tasks php artisan migrate
5、模型
講解:How do query scopes work in Laravel?
模型能夠與數據庫相關構成一個接口封裝: 一個task封裝,其實只是一條sql任務。
App\Task::incomplete();
App\Task::incomplete()->where('id', '>=" , 2)->get();
6、控制器
生成一個 TasksController 控制器。
$ php artisan make:controller TasksController
- 參數的提取和處理
Goto: [Laravel] 02 - Route and MVC ----> 2、URL 處理
基本思路:得到參數 ---> 傳給模型 ---> 做爲sql查詢的關鍵字 ---> 返回結果
- 表單信息的驗證
[1] 必需要填寫的內容,關鍵字:required.
- Error 信息的輸出
Goto: [Laravel] 07 - Project: functions in Controller - 2、數據驗證
Validator類驗證法 【相較於 控制器驗證法 有什麼好處麼】
// 2. Validator類驗證 $validator = \Validator::make($request->input(), [ 'Student.name' => 'required|min:2|max:20', 'Student.age' => 'required|integer', 'Student.sex' => 'required|integer', ], [ 'required' => ':attribute 爲必填項', 'min' => ':attribute 長度不符合要求', 'integer' => ':attribute 必須爲整數', ], [ 'Student.name' => '姓名', 'Student.age' => '年齡', 'Student.sex' => '性別', ]); if ($validator->fails()) { return redirect()->back()->withErrors($validator)->withInput(); }
7、Form Request Data and CSRF【視圖】
Ref: https://v4-alpha.getbootstrap.com/examples/blog/【bootstrap的各類模板】
關於界面部分,本篇暫時不做考慮。如下是其餘的一些界面相關章節:
- Rendering Posts
- Laravel Mix and the Front-end
- 一個例子引出兩個問題
Ref: http://www.javashuo.com/article/p-qlmtlnad-hk.html
@extends('layout') @section('content') <h1>Edit the Comment</h1> <form method="POST" action="/comments/{{ $comment->id }}">
{{ method_field('PATCH') }} {{ csrf_field() }}
<div class="form-group"> <textarea name="content" class="form-control">{{ $comment->content }}</textarea> </div> <div class="form-group"> <button type="submit" class="btn btn-primary">Update Comment</button> </div> </form> @stop
- 跨站方法僞造
<input type="hidden" name="_method" value="PATCH">
跨站方法僞造,HTML 表單沒有支持 PUT、PATCH 或 DELETE 動做。
因此在從 HTML 表單中調用被定義的 PUT、PATCH 或 DELETE 路由時,你將須要在表單中增長隱藏的 _method 字段來僞造該方法,詳情參考 官方文檔。
- 跨站請求僞造
Ref: https://blog.csdn.net/fationyyk/article/details/50832687
CSRF是跨站請求僞造(Cross-site request forgery)
Laravel自動爲每一個用戶Session生成了一個CSRF Token,該Token可用於驗證登陸用戶和發起請求者是不是同一人,若是不是則請求失敗。
Laravel提供了一個全局幫助函數csrf_token(本地存放在:\www\laravel5.1\vendor\laravel\framework\src\Illuminate\Foundation\helpers.php)來獲取該Token值,所以只需在視提交圖表單中添加以下HTML代碼便可在請求中帶上Token。
如下是第二種寫法:
{!! csrf_field() !!}
8、接口基本思路
[1] 建立控制器,以及對應的遷移文件。
$ php artisan make:model Comment -m
[2] 模型
class Post extends Model { public function comments() { return $this->hasMany(Comment::class); //返回的是什麼? } public function addComment($body) { $this->comments()->create(compact('body')); } }
[3] 命令行測試模型:$ php artisan tinker
$ post = App\Post::find(6); # 獲取id=6的數據
以上算是 test api 的一個方式。
功能模塊
1、用戶註冊
Ref: [Laravel] 08 - Auth & Data Migration【此篇的登陸不是很完善,在此補充】
- 添加一個用戶
Ref: 使用 Php Artisan Tinker 來調試你的 Laravel
填充基本信息:name, email, password
如此,數據庫便添加了一條信息。
- ORM關聯
也便是:數據庫中關於 user_id字段 的問題。
$comment -> post --> user
Ref: Laravel框架ORM關聯hasOne, belongsTo, hasMany
- 創建兩個 '控制器'
註冊:RegistrationController.php
public function store() { (1) Validate the form. $this->validate(request(), [ 'name' => 'required', 'email' => 'required|email', 'password' => 'required' ]); (2) Create and save the user. $user = User::create(request(['name', 'email', 'password'])); (3) Sign them in. auth()->login($user); (4) Redirect to the home page. return redirect()->home(); }
會話:SessionsController.php
public function create() { } public function destroy() { auth()->logout();
return redirect()->home(); }
- 導航條username顯示
- 將參數封裝
[PostsController.php]
auth()->user()->publish( new Post(request(['title', 'body'])) );
[User.php]
public function publish(Post $post) { $this->posts()->save($post); }
- Guest 中間件
[SessionsController.php]
public funcion __construct()
{
$this->middleware('guest', ['except' => 'destroy']);
}
2、郵件
Ref: [Laravel] 09 - Functional models - 郵件發送
- 調用 ’send email'
\Mail::to($user)->send(new Email);
- 申請 'email account'
Goto: https://mailtrap.io【申請一個測試郵箱】
- 編寫 'email類’
$ php artisan make:mail Welcome
[app/Mail/Welcom.php]
class Welcome extends Mailable { ... public function __construct(User $user) # 這裏支持了傳參 { $this->user = $user; } public functionbuild() { return $this->view('email.welcome'); # 這裏能夠考慮with傳參 } }
- 編寫 view of email
- markdown
Mail:
public functionbuild() { return $this->markdown('emails.welcome-again'); }
View:
同時在 views/emails下生成 welcome-again.blade.php
Goto: https://laravel.com/docs/5.4/mail#writing-markdown-messages
Goto: Laravel 5.4中郵件已支持Markdown語法
3、Form Requests and Form Objects
- 生成框架文件
$ php artisan make:request RegistrationRequest
提供了兩個函數。同時也意味着 request 的處理能夠分配到這裏一部分。
// Determine if the user is authorized to make this request.
public function authorize() { return true; } // Get the validation rules that apply to the request. public function rules() { return [ // ]; }
- 分離 參數驗證
目的 - 精簡控制器中的函數邏輯
第一步:
[1] 填充 RegistrationRequest
[2] 控制器內對應函數添加參數:RegistrationRequest
第二步:
[1] 轉移控制器函數內的剩餘邏輯到自定義函數:persist()
[2] 這樣一來,函數已空,但看上去貌似不錯。
4、Session Handling and Flash Messaging
Ref: [PHP] 05 - Cookie & Session【php控制session的原生態方式】
public function store(RegistrationForm $form) { $form->persist();
session('message', 'Here is a default message'); return redirect()->home(); }
Ref: [ Laravel 5.4 文檔 ] HTTP層 —— Session
看這個文檔相對容易一些。
- DB 做爲 session 驅動
使用 Session 來存儲用戶請求信息。Laravel 經過乾淨、統一的 API 處理後端各類 Session 驅動,目前支持的流行後端驅動包括 Memcached、Redis 和 數據庫。
Goto: [Laravel] 09 - Functional models - 緩存使用
Goto: [Laravel] 11 - WEB API : cache & timer - 靜態緩存
Goto: [Laravel] 12 - WEB API : cache implement - 三個方案
Session 配置文件位於 config/session.php
。
-
- 默認狀況下,Laravel 使用的 Session 驅動爲
file
驅動,這對許多應用而言是沒有什麼問題的。 - 在生產環境中,你可能考慮使用
memcached
或者redis
驅動以便獲取更快的 Session 性能。
- 默認狀況下,Laravel 使用的 Session 驅動爲
- 實現方法
以下可見,cache、sessions是分開的目錄。
能夠認爲,sessions 有本身的實現方式,或者能夠藉助 cache 的方式(數據庫)。