本站的主題是商業,創業,美食,葡萄酒,閱讀,網路科技。
這是我的 FB粉專 以及 IG,我比較常使用 Threads,歡迎大家追蹤互動~
https://laravel.com/docs/5.2/quickstart
(包含 CRUD 中的 create, read, delete)
# Preparing the database and ORM
php artisan make:migration create_tasks_table --create=tasks
會新增一 php file:
/database/migrations/year_month_date_randomNumber_create_tasks_table.php。
–create=tasks 的 “tasks” 是 table name。
注意專案裡不能有多個 class CreateTasksTable 的 migration php file, 待會下 artisan 指令會 error.
// in createddate_create_tasks_table.php class CreateTasksTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('tasks', function (Blueprint $table) { $table->increments('id'); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::drop('tasks'); } }
Build the DB table specified in the “up” function:
php artisan migrate
Laravel 本身就提供 “users”, “password_resets” 基本會員系統需要的 DB schema, 再加上剛做好的 tasks table.
做好 DB schema 後,就要做 ORM class:
php artisan make:model Task
會生成 /app/Task.php:
// app/Task.php class Task extends Model { ... }
不用明文指定這個 ORM class 對應哪個 table,默認對應到”模型名稱的複數型態”。就這個例子來說,對應到 table tasks。
# Routing and Views
加上 view, 定義 template:/resources/views/layouts/app.blade.php。
Laravel 使用 “Blade templating engine”.
https://laravel.com/docs/5.2/blade
他使用 {{ }} 嵌入變數,這會跟某些 JavaScript 框架衝突 (例如 Angular), 可以加上 @{{ }},雙大括號會 pass 到前端,由前端框架做 templating.
加上 child view:/resources/views/tasks.blade.php。
/app/Http/routes.php 改成
Route::get('/', function () { return view('tasks'); // view('tasks') 會去找 /resources/views/tasks.blade.php });
有個小地方紀錄一下,
https://laravel.tw/docs/5.2/quickstart#routing 中
Route::group(['middleware' => 'web'], function () { /** * 顯示所有任務 */ Route::get('/', function () { // }); });
會有這個問題 https://github.com/laravel/framework/issues/12022
將 Route::get 移至 global scope 就可以了 (不需要 Route::group([‘middleware’ => ‘web’], function ())
Method Spoofing. The pattern:
<form action="{{ url('task/'.$task->id) }}" method="POST"> {{ csrf_field() }} {{ method_field('DELETE') }} </form>
Uses method_field(‘DELETE’) to spoof delete method,他傳到前端其實是:
<input type="hidden" name="_method" value="DELETE">
另外 Laravel 使用 Implicit Model Binding,在 router 中:
Route::delete('/task/{task}', function (Task $task) { $task->delete(); ... });
我們並未明文指定 delete method callback function 的 parameter (Task $task),可以”直接”在 callback function 填上你的 ORM class。
https://laravel.com/docs/5.2/routing#route-model-binding
“Laravel will automatically resolve type-hinted Eloquent models defined in routes or controller actions whose variable names match a route segment name.“
本站的主題是商業,創業,美食,葡萄酒,閱讀,網路科技。