日曜日, 8月 20, 2017

(仕様が変更された)Laravel 5.4 を使う

故あって 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 ってのは頭が整理されるとってもよいフレームワークだと思います。しかしながら仕様変更が激しいので要注意です。

Qt: 外部プログラムを起動する

  Qt/C++ のアプリは、外部へ直接アクセスできます。これはネットアプリでは不可能な Qt のメリットです。 外部プログラムを起動することもできます。QProcess::startDetached() を使うと独立したプロセスを立ち上げることができます。 この QProces...