見出し画像

【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をよろしくお願いします👍


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