laravel 開発日記 第9回 ~ 基本CRUDアプリを作ってみる(中編) ~

前回にひきつづき、基本CRUDアプリを作ろうと思います。


(5)ルートサービスプロバイダ修正

参考
■初めてのLARAVEL 5 : (32) ROUTE MODEL BINDING
https://laravel10.wordpress.com/2015/03/28/%E5%88%9D%E3%82%81%E3%81%A6%E3%81%AElaravel-5-32-route-model-binding/

ルートとモデルの結合(ROUTE MODEL BINDING)をするために
/app/Providers/RouteServiceProvider.php
を修正します。

必須ではないですが、やっておくとコントローラーの記述が楽になるので、修正します。

【作業ファイル:/app/Providers/RouteServiceProvider.php】
    public function boot(Router $router)
    {
        parent::boot($router);
        $router->model('corporationDivisions', 'App\CorporationDivision');      // ←この一文追加

        //
    }

(6)コントローラー
データの処理の流れを管理。

【作業ファイル:/app/Http/Controllers/CorporationDivisionsController.php】

<?php namespace App\Http\Controllers;

use App\Http\Requests;
use App\Http\Controllers\Controller;

use Illuminate\Http\Request;

//以下、追加
use Session;
use App\CorporationDivision;    //モデル
use App\Http\Requests\CorporationDivisionRequest;    //リクエスト

まずは前段。
フラッシュメッセージ用のSession、モデル、リクエスト、
計3つのクラスをuseしてます。

■PHPの名前空間について簡単にまとめてみた
http://ucwd.jp/blog/736

useについては、上記サイトがわかりやすい。
・・・と、いっても正直自分も、完全理解できてるか微妙。
ま、なんとなーく使えればよいかなー。

//認証
public function __construct()
{
    $this->middleware('auth');
}

次、コンストラクタで、認証用ミドルウェアを呼び出してます。
さらにほかのミドルウェアを呼び出す場合は、
$this->middleware~
の行を続けて記入可能です。

public function index()
{
    //データ取得
    $corporationDivisions = CorporationDivision::all();

    //データを渡しつつ、ビュー表示
    return view('corporationDivisions.index', compact('corporationDivisions'));
}

次はindex(一覧ページ)。
普通に、テーブルデータを取得して、ビューに渡してます。

public function create()
{
    //ビュー表示
    return view('corporationDivisions.createAndEdit');
}

新規登録画面表示。
createとeditのビューは、共用にするため、
createAndEditというビューを呼び出してます。

public function store(CorporationDivisionRequest $request)
{
    //リクエストされたデータを新規格納
    CorporationDivision::create( $request->all() );

    //フラッシュメッセージの格納
    Session::flash('flash_message','1件、追加しました。');
    //一覧画面へリダイレクト
    return redirect('corporationDivisions');
}

次は、新規登録実行。
コメントに書いてある通り、リクエストされたデータを新規格納して、
フラッシュメッセージを追加、一覧へのリダイレクトをしています。

public function show(CorporationDivision $corporationDivision)
{
    //データを渡しつつ、ビュー表示
    return view('corporationDivisions.show',compact('corporationDivision'));
}

詳細表示画面。
これもそのまんま、ビューを表示してるだけです。

public function edit(CorporationDivision $corporationDivision)
{
    return view('corporationDivisions.createAndEdit', compact('corporationDivision'));
}

編集画面。
新規登録と同じcreateAndEditビューを開くのですが、
編集なので、テーブルのデータをビューに渡してます。
このデータの有無により、
ビュー側で、編集画面か新規登録画面かを判断します。

■Laravel use same form for create and edit
http://stackoverflow.com/questions/22844022/laravel-use-same-form-for-create-and-edit

public function update(CorporationDivision $corporationDivision, CorporationDivisionRequest $request)
{         
    //データを更新する
    $corporationDivision->update($request->all());

    //フラッシュメッセージの格納
    Session::flash('flash_message','1件、編集しました。');

    //一覧ページへリダイレクト
    return redirect('corporationDivisions');
}

ようやくラスト前、データの更新処理です。
新規登録と似たようなもので、
データの更新、フラッシュメッセージの格納、リダイレクトを行ってます。

public function destroy(CorporationDivision $corporationDivision)
{         
    //データベースからデータ消去
    $corporationDivision->delete();

    //フラッシュメッセージの格納
    Session::flash('flash_message','1件、削除しました。');

    //一覧ページへリダイレクト
    return redirect('corporationDivisions');
}

最後、削除時の処理です。
処理自体は、いたってシンプル。
消去して、フラッシュメッセージを書き込み、リダイレクトです。

一つ一つやってることは、大したことないのですが、
処理が多いですね・・・。

コントローラーの説明にかなりの行数とられたので、
ビューの説明は、次回に回します。

laravel

Posted by dog-ears