故あって Laravel で PHP サイトを作ることとなりました。ので概要をメモっておきたいと思います。
これ MVC とか ORM とか DI とか軽く使えるよくできてるシステムなんですが、いまだマイナー系なのかなんなのか仕様がバージョンごとコロコロ変わる。
ついこのあいだ ver. 5.1 で書いて ver. 5.4 で動かそうと思うと… 動きます。ライブラリをそのままコピーしてあるからなんですが、これが新たなプロジェクトをたちあげようとするとライブラリの仕様が変更されている。
新しいライブラリはメソッドなど整理されていて使いやすくなっていますが、仕様が異なるので同じ調子で書いていくとエラーが続出します。
まずは新しいプロジェクトの作り方から。
laravel new プロジェクト名
これでライブラリなどすべてコピーされて完全なシステムが出来上がります。それはいいんですが、ここでまずルーティングのファイルの置き場所が違う。ファイル名まで違う。ver. 5.3 で変更されたようです。
ROUTING:
routes/web.php
ここですね。あとビューとかコントローラーとかは同じです。
VIEW:
resources/views/*.blade.php
CONTROLLER:
app/Http/Controllers/*.php
ルーティングの書き方はこんな感じです。
Route::resource('/dashboard','OrderController');
これですべてページからのリクエストが仕分けされてコントローラーで処理できます。これはいいですね。
動詞 |
URI |
アクション |
ルート名 |
GET |
/photos |
index |
photos.index |
GET |
/photos/create |
create |
photos.create |
POST |
/photos |
store |
photos.store |
GET |
/photos/{photo} |
show |
photos.show |
GET |
/photos/{photo}/edit |
edit |
photos.edit |
PUT/PATCH |
/photos/{photo} |
update |
photos.update |
DELETE |
/photos/{photo} |
destroy |
photos.destroy |
これどういうことかってページから投げられるリクエストでそれぞれアクションを呼べるわけなんです。DELETE って投げれば destroy ってメソッドを定義するだけできちんと動くサイトが出来てしまうわけです。
こうやってビューでフォームを指定します。DELETE を投げてるわけですね。
<form method="post" action="/dashboard/{{$task->id}}">
{{ csrf_field() }}
{{ method_field('delete') }}
<input type='submit' value='Remove'
class='btn btn-danger btn-sm' />
</form>
で、コントローラーを定義します。
public function destroy($id)
{
$order= Order::findOrFail($id);
$order->delete();
return redirect ( '/dashboard' );
}
これだけでリクエストが仕分けされて処理できるって仕組みです。うまいですね。
Order ってのはデータベースのテーブルがマップされたオブジェクトです。ORM ってのは便利ですね。delete() って呼ぶだけで作業は完了です。
Laravel ってのは頭が整理されるとってもよいフレームワークだと思います。しかしながら仕様変更が激しいので要注意です。