PHP

Laravel アップロードファイルのバリデーション Rule Request

Laravel

 

この記事の内容

 

PDFファイルのアップロードのバリデーションを作ってみました🐱

  • 拡張子が.pdf
  • 半角英数.pdfである。但し、「-」「_」は例外として許可する

 

Request

 

 

<?php

namespace App\Http\Requests\Team\Share;

use Illuminate\Foundation\Http\FormRequest;
use App\Rules\Team\UploadPdfRule;

class UploadEventPdfRequest extends FormRequest
{
    public function __construct(
        UploadPdfRule $upload_pdf_rule
    ) {
        $this->upload_pdf_rule = $upload_pdf_rule;
    }
    /**
     * 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 [
            'pdf' => [
                'required',
                'file',
                $this->upload_pdf_rule
            ]
        ];
    }
}

 

ここに注目

 

    public function rules()
    {
        return [
            'pdf' => [
                'required',
                'file',
                $this->upload_pdf_rule
            ]
        ];
    }
  • 必須である
  • fileタイプ
  • $this->upload_pdf_rule
    App\Rules\Team\UploadPdfRuleルールを適用

 

Rule

 

<?php

namespace App\Rules\Team;

use Illuminate\Contracts\Validation\Rule;

class UploadPdfRule implements Rule
{
    /**
     * Determine if the validation rule passes.
     *
     * @param  string  $attribute
     * @param  mixed  $value
     * @return bool
     */
    public function passes($attribute, $value)
    {
        // nullはエラー
        if (is_null($value)) {
            return false;
        }

        // 選択されたファイルの拡張子を取得する
        $extension = $value->getClientOriginalExtension();
        //拡張子が.pdfであることを確認
        if ($extension !== "pdf") {
            return false;
        }
        // ファイル名が「{半角英数}.pdf」であることを確認。但し「-」「_」は許可
        if (!preg_match('/^[-_a-zA-Z0-9]+\.pdf$/', $value->getClientOriginalName())) {
            return false;
        }
        return true;
    }

    /**
     * Get the validation error message.
     *
     * @return string
     */
    public function message()
    {
        return __('validation.regex');
    }
}

passes()メソッド内でtrueを返さない時にバリデーションエラーになる

こういったバリデーションを柔軟に設定できるのがRuleの魅力ですね。

 

皆さんもオリジナルなバリデーションを作ってみてください。

 

Amazonおすすめ

iPad 9世代 2021年最新作

iPad 9世代出たから買い替え。安いぞ!🐱 初めてならiPad。Kindleを外で見るならiPad mini。ほとんどの人には通常のiPadをおすすめします><

コメントを残す

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

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)