1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Laravel CRUD処理を使った投稿アプリを作成する その9 バリデーションをRequestに記載する

Last updated at Posted at 2020-09-20

目的

  • アプリを作成する上で基本となるCRUD処理を有したLaravelアプリをチュートリアル的に作成する方法をまとめる

実施環境

  • ハードウェア環境
項目 情報
OS macOS Catalina(10.15.5)
ハードウェア MacBook Pro (13-inch, 2020, Four Thunderbolt 3 ports)
プロセッサ 2 GHz クアッドコアIntel Core i5
メモリ 32 GB 3733 MHz LPDDR4
グラフィックス Intel Iris Plus Graphics 1536 MB
  • ソフトウェア環境
項目 情報 備考
PHP バージョン 7.4.3 Homwbrewを用いて導入
Laravel バージョン 7.0.8 commposerを用いてこちらの方法で導入→Mac Laravelの環境構築を行う
MySQLバージョン 8.0.19 for osx10.13 on x86_64 Homwbrewを用いてこちらの方法で導入→Mac HomebrewでMySQLをインストールする

前提条件

前提情報

  • ソースコードはこちら→https://github.com/miriwo0104/laravel_crud/tree/master
  • DockerやAWSなどは使用せずにMacのローカルに実施環境と同じLaravel開発環境を構築して実施する。
  • チュートリアルで実際に筆者が作成したソースコードをGitHubにて公開予定である。
  • CRUD処理の作成完了を最短目標にしてバリデーションなどは後々設定することとする。
  • 実施環境と同じ環境がDockerやAWSで用意できるなら都度読み替えていただければ実施が可能だと思う。
  • 公式ドキュメントと一冊の技術書を元に本記事を記載する。
  • DBへの意図しないデータの流入を防ぐためバリデーションを実装する。
  • 問い合わせの内容は「入力がされていること」のバリデーションルールを、新規投稿と投稿編集は「入力されており、かつ140文字以内であること」定義してバリデートする。
  • バリデーションで弾かれた時にエラーが出力される様にする。
  • 下記に目を通しておくと理解が早いかもしれない。
  • バリデーションルールは下記の公式ドキュメントに数多く記載されているので実装できたら遊んでみるのもいいかもしれない。

この記事の読後感

  • ユーザが入力する部分にバリデーションを実装することができ、バリデーションルールをRequestファイルに記載する。

概要

  1. Requestファイルの作成と記載
  2. コントローラファイルの記載修正
  3. 確認

詳細

  1. Requestファイルの作成と記載

    1. laravel_crudディレクトリで下記コマンドを実行し専用のリクエストファイルを作成する。

      $ php artisan make:request ContentRequest
      
    2. laravel_crudディレクトリで下記コマンドを実行し先に作成したリクエストファイルを開く。

      $ vi app/Http/Requests/ContentRequest.php
      
    3. 先に開いたリクエストファイルを下記の様に修正する。

      laravel_crud/app/Http/Requests/ContentRequest.php
      <?php
      
      namespace App\Http\Requests;
      
      use Illuminate\Foundation\Http\FormRequest;
      
      class ContentRequest extends FormRequest
      {
          /**
           * Determine if the user is authorized to make this request.
           *
           * @return bool
           */
          public function authorize()
          {
              // 下記を修正する
              return true;
          }
      
          /**
           * Get the validation rules that apply to the request.
           *
           * @return array
           */
          public function rules()
          {
              return [
                  // 下記を追記する
                  'content' => ['required', 'max: 140'],
              ];
          }
      }
      
    4. laravel_crudディレクトリで下記コマンドを実行し専用のリクエストファイルを作成する。

      $ php artisan make:request InquiryRequest
      
    5. laravel_crudディレクトリで下記コマンドを実行し先に作成したリクエストファイルを開く。

      $ vi app/Http/Requests/InquiryRequest.php
      
    6. 先に開いたリクエストファイルを下記の様に修正する。

      laravel_crud/app/Http/Requests/InquiryRequest.php
      <?php
      
      namespace App\Http\Requests;
      
      use Illuminate\Foundation\Http\FormRequest;
      
      class InquiryRequest extends FormRequest
      {
          /**
           * Determine if the user is authorized to make this request.
           *
           * @return bool
           */
          public function authorize()
          {
              // 下記を修正する
              return true;
          }
      
          /**
           * Get the validation rules that apply to the request.
           *
           * @return array
           */
          public function rules()
          {
              return [
                  // 下記を追記する
                  'content' => ['required'],
                  'name' => ['required'],
                  // 上記までを追記する
              ];
          }
      }
      
  2. コントローラファイルの記載修正

    1. laravel_crudディレクトリで下記コマンドを実行しコントローラファイルを開く。

      $ vi app/Http/Controllers/ContentController.php
      
    2. 先に開いたファイルを下記の様に修正する。

      laravel_crud/app/Http/Controllers/ContentController.php
      <?php
      
      namespace App\Http\Controllers;
      
      use Illuminate\Http\Request;
      use App\Models\Content;
      // 下記を追記する
      use App\Http\Requests\ContentRequest;
      
      class ContentController extends Controller
      {
          public function input()
          {
              return view('contents.input');
          }
      
          // 下記を修正する
          public function save(ContentRequest $contentRequest)
          {
              // バリデーションルールとバリデート命令を削除する
              $input_content = new Content();
              // 下記を修正する
              $input_content->content = $contentRequest['content'];
              $input_content->save();
              
              return redirect('/output');
          }
      
          public function output()
          {
              $contents_get_query = Content::select('*');
              $all_contents = $contents_get_query->get();
              
              return view('contents.output', [
                  'all_contents' => $all_contents,
              ]);
          }
      
          public function delete(Request $request)
          {
              $contents_delete_query = Content::select('*');
              $contents_delete_query->where('id', $request['content_id']);
              $contents_delete_query->delete();
      
              return redirect('/output');
          }
      
          public function edit($content_id)
          {
              $contents_edit_query = Content::select('*');
              $contents_edit_query->where('id', $content_id);
              $edit_contents = $contents_edit_query->get();
              $edit_content = $edit_contents[0];
      
              return view('contents.edit', [
                  'edit_content' => $edit_content,
              ]);
          }
      
          // 下記を修正する
          public function update(ContentRequest $contentRequest)
          {
              // バリデーションルールとバリデート命令を削除する
              $contents_update_query = Content::select('*');
              // 下記を修正する
              $contents_update_query->where('id', $contentRequest['content_id']);
              $update_contents = $contents_update_query->get();
      
              $update_content = $update_contents[0];
              // 下記を修正する
              $update_content->content = $contentRequest['content'];
              $update_content->save();
      
              return redirect('/output');
          }
      }
      
    3. laravel_crudディレクトリで下記コマンドを実行しコントローラファイルを開く。

      $ vi app/Http/Controllers/InquiryController.php
      
    4. 先に開いたファイルを下記の様に修正する。

      laravel_crud/app/Http/Controllers/InquiryController.php
      <?php
      
      namespace App\Http\Controllers;
      
      use Illuminate\Http\Request;
      use Illuminate\Support\Facades\Mail;
      use Illuminate\Support\Facades\Auth;
      use App\Mail\SendMail;
      // 下記を追記する
      use App\Http\Requests\InquiryRequest;
      
      class InquiryController extends Controller
      {
          public function input()
          {
              $user_infos = Auth::user();
              return view('inquiries.input', [
                  'user_infos' => $user_infos,
              ]);
          }
          
          // 下記を修正する
          public function send(InquiryRequest $inquiryRequest)
          {
              // バリデーションルールとバリデート命令を削除する
              // 下記を修正する
              $inquiry_content = $inquiryRequest->all();
              Mail::to('admin@example')->send(new SendMail($inquiry_content));
              return redirect(route('home'));
          }
      }
      
  3. 確認

    1. laravel_crudディレクトリで下記コマンドを実行しローカルサーバを起動する。

      $ php artisan serve
      
    2. 下記にユーザ認証後、下記にアクセスする。

    3. 何も入力せず「送信」をクリックし下記のようにエラーが出ることを確認する。

      127_0_0_1_8000_input.png

    4. 下記にユーザ認証後、下記にアクセスする。(コンテンツのidは1以外でも構わない)

    5. 何も入力せず「送信」をクリックし下記のようにエラーが出ることを確認する。

      127_0_0_1_8000_edit_5.png

    6. 下記にユーザ認証後、下記にアクセスする。(コンテンツのidは1以外でも構わない)

    7. 何も入力せず「送信」をクリックし下記のようにエラーが出ることを確認する。

      127_0_0_1_8000_inquiry_input.png

参考文献

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?