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

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

Routing

// routes/web.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>

    ...

    <div>
        <a>id]) }}"
          class="btn btn-primary"
        >
            編集
        </a>

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

        ...
    </div>
@endsection

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


Helper

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

helper.php の追加

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

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

function delete_form($url, $label = '削除')
{
    $form = Form::open(['method' => 'DELETE', 'url' => $url, 'class' => 'd-inline']);
    $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>

    ...

    <div>
        <a>id]) }}"
          class="btn btn-primary"
        >
            編集
        </a>

        // 変更
        {!! delete_form(['articles', $article->id]) !!}

        <a href="{{ action('ArticlesController@index') }}" class="btn btn-secondary float-right">
            一覧へ戻る
        </a>
    </div>
@endsection

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


まとめ

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

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

コメントを残す

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

WordPress.com ロゴ

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

Google+ フォト

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

Twitter 画像

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

Facebook の写真

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

%s と連携中