初めてのLaravel 5.1 : (22) Helper 関数の追加

今回は記事の削除機能を追加します。この作業を通してヘルパー関数の作成も行います。

Routing

// app/Http/routes.php

Route::get('articles', 'ArticlesController@index');
Route::get('articles/create', 'ArticlesController@create');
Route::get('articles/{id}', 'ArticlesController@show');
Route::post('articles', 'ArticlesController@store');
Route::get('articles/{id}/edit', 'ArticlesController@edit');
Route::patch('articles/{id}', 'ArticlesController@update');
Route::delete('articles/{id}', 'ArticlesController@destroy');  // 追加

ArticlesController@destroyへのルートを追加します。メソッドは deleteにします。


Controller

// app/Http/Controllers/ArticlesController.php
    ...
    public function destroy($id) {
        $article = Article::findOrFail($id);

        $article->delete();

        return redirect('articles');
    }

$id で記事を検索し、delete() メソッドで削除しています。


View

記事の表示画面に、削除ボタンを追加します。

// resoruces/views/articles/show.blade.php

@extends('layout')

@section('content')
    <h1>{{ $article->title }}</h1>

    <hr/>

    <article>
        <div class="body">{{ $article->body }}</div>
    </article>

    <br/>

    {!! link_to(action('ArticlesController@edit', ['id' => $article->id]), '編集', ['class' => 'btn btn-primary']) !!}

    <br/>
    <br/>

    {!! Form::open(['method' => 'DELETE', 'url' => ['articles', $article->id]]) !!}
        {!! Form::submit('削除', ['class' => 'btn btn-danger']) !!}
    {!! Form::close() !!}
@stop

DELETEをリクエストするFormを作成し、削除ボタンを追加します。
これで、記事の削除は出来るようになりました。


Helper

DELETEをリクエストするFormの作成部分をヘルパー関数として切り出してリファクタリングしてみます。

helper.phpの追加

新規に helper.php を作成します。Formタグを生成して返信する delete_form() 関数を追加します。

<?php
// app/Http/helper.php

function delete_form($urlParams, $label = '削除')
{
    $form = Form::open(['method' => 'DELETE', 'url' => $urlParams]);
    $form .= Form::submit($label, ['class' => 'btn btn-danger']);
    $form .= Form::close();

    return $form;
}

autoload 設定

helper.php が Laravel に自動ロードされるように、composer.jsonを修正します。

{
    ...

    "autoload": {
        "classmap": [
            "database"
        ],
        "psr-4": {
            "App": "app/"
        },
        "files": ["app/Http/helper.php"]    <-- 追加
    },

    ...
}

composer.json の自動ロード設定を変更した後は以下のコマンドで設定を反映する必要があります。

composer dump-autoload

helperの使用

delete_form()を使用するように、show.blade.phpを修正します。

// resoruces/views/articles/show.blade.php

@extends('layout')

@section('content')
    <h1>{{ $article->title }}</h1>

    <hr/>

    <article>
        <div class="body">{{ $article->body }}</div>
    </article>

    <br/>

    {!! link_to(action('ArticlesController@edit', ['id' => $article->id]), '編集', ['class' => 'btn btn-primary']) !!}

    <br/>
    <br/>

    {!! delete_form(['articles', $article->id]) !!}
@stop

delete_form ヘルパーを使ったことで、大分スッキリしました。また、delete_formヘルパーは記事以外にも削除が必要になった時には再利用が可能です。


まとめ

以下のことが出来るようになりました。

  • データの削除
  • ヘルパー関数の作成
  • 自動ロードへの追加設定

初めてのLaravel 5.1 : (22) Helper 関数の追加」への1件のフィードバック

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中