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');
}

最後、削除時の処理です。 処理自体は、いたってシンプル。 消去して、フラッシュメッセージを書き込み、リダイレクトです。 一つ一つやってることは、大したことないのですが、 処理が多いですね・・・。 コントローラーの説明にかなりの行数とられたので、 ビューの説明は、次回に回します。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です