見出し画像

【Laravelでの実装例付き】XdやSketchといった特殊な拡張子を持つファイルをバリデーションする方法

デザインアセットのシェアサービスcollinでは、XDやSkecth以外のファイルをアップロードできないように投稿されるファイルの拡張子に関してバリデーションをかけています。

こんな感じで、.skecthもしくは.xd以外のファイルを選択した場合はエラーが出るように👷‍♂️

laravelが標準装備しているフォームリクエストバリデーションではjpeg, gifといった一般的なファイルの拡張子のバリデーションは設定できるものの、.skecthや.xdは対応していませんでした😿

そこで本記事では、標準装備しているファイル拡張子以外を投稿できないようにする方法をまとめたいと思います。

実現したいこと

✅Xd, Skecth以外のファイルはアップロードできないようにしたい
✅Xd, Skecth以外のファイルが選択された場合はエラー文言を表示したい

実装方法

ベースはこちらの記事です。バリデーションのカスタマイズ方法がとても丁寧に書かれていました🎉

カスタムバリデーションのロジックを書く「CustomValidator.php」以外はこちらの記事のままです!なので、本記事では、Xd, Skecthファイルか否かをチェックする箇所のみご紹介します。

<?php

namespace Domain;

class CustomValidator extends \Illuminate\Validation\Validator
{
  /**
  *
  * @param $attribute
  * @param $value
  * @param $parameters
  * @return bool
  */
  public function validateDesign($attribute, $value, $parameters)
  {
      // 選択されたファイルの拡張子を取得する
      $extension = $value->getClientOriginalExtension(); 
      
      //拡張子が.xdならばOK!
      if ($extension == "xd") {
          return true;
      }

     //拡張子が.skecthならばOK!
      if ($extension == "sketch") {
          return true;
      }

      return false;
  }
}

getClientOriginalExtension()で拡張子を取得し、Xd, Skecthファイルか否かを判断しています。たったこれだけ。

if文の中にある拡張子名を変えればどんなファイルのバリデーションにも対応できます。photoshopやillustraterのファイルもcollinにアップしたいという声いただいたので、早速対応したいと思います。

引き続き、collinをよろしくお願いします👍


この記事が気に入ったら、サポートをしてみませんか?気軽にクリエイターを支援できます。

note.user.nickname || note.user.urlname

Product Owner at docomo / プライベートでもC向けWebサービス作ってます / 元 #入江開発室 / #nyan / SketchやXd、Figmaなどのデザインアセットのシェアサービス #collin

嬉しいです、、、週1ブログ更新頑張れます👍
4

Yuta Kishi

Product Manager @ docomo / #nyan / #collin

入江開発室メンバーマガジン

入江開発室のメンバーのnote一覧です https://camp-fire.jp/projects/view/74574

コメント1件

実際のバリデーション方法について書いてあってわかりやすかったです。
カスタムバリデーションについて公式ドキュメントを読んだところ、Ruleのオブジェクトを作る方法もあったので、共有しますね
https://laravel.com/docs/5.8/validation#custom-validation-rules
コメントを投稿するには、 ログイン または 会員登録 をする必要があります。