Laravelタイムスタンプバリデーター

画像



Laravel 5.1、Laravel 5.2、Lara ...コードの進行、最適化、開発。 たとえば、新しい(5.2)バージョンでは配列バリデーターが登場しましたが、着信タイムスタンプを検証する必要がある場合はどうでしょうか? そうです、 松葉杖を書くのあなたの決断です。



むかしむかし、Laravel 5.1に1つのプロジェクトがありました。 より正確には、API側が存続します。 さまざまな日付を前後に「駆動」する必要があります。 しかし、タイムゾーンが存在する場合、それらをどのように駆動しますか? サーバーをUTC + 0でインストールし、タイムスタンプを使用して通信することが決定されました。タイムスタンプは、フロントエンドで適切な時間に簡単に変換できます。 さて、それについての質問はありません。 1つを除いて-受信データを検証する方法は? 独自のバリデーターを作成します。



完全なバリデータコードは記事の最後にあります。



行こう!



app / Extensions / Validatorsフォルダーで、ファイルを作成し、 TimestampValidator.phpという名前を付けます。



namespace Lame\Extensions\Validators; use Illuminate\Validation\Validator; class TimestampValidator extends Validator{ }
      
      





着信日付が「前」と「後」に一致することを受け入れる必要があります。



最初の例を考えてみましょう。 ユーザーの誕生日があります。 ユーザーは10歳以上でなければなりません。 2016年以前に生まれました。 したがって、2016年までの日付を受け入れる必要があります。 検証ルールで、次を示します。



 /**   ,  10 ,      timestamp    */ $date = Carbon::now()->subYears(10)->addDay(1)->timestamp; /** ,      timestamp       timestamp */ $rules = [ "bDay" => "numeric|before_timestamp:".$date, ];
      
      





ルール「before_timestamp」が登場しました。 バリデーターに戻り、必要なチェックを実行するメソッドを作成します。 メソッド名の構造は、「validate <rule in camelCase format>」でなければなりません。 入力パラメーターの$値は、外部から取得した値です。 $ parameters-ルールで指定されるパラメーターの配列(before_timestamp: "。$ date)。



 public function validateBeforeTimestamp($attribute, $value, $parameters) { $value = (int)$value; if ((int)$parameters[0] <= 0) { throw new \Exception("Timestamp parameter in the beforeTimestamp validator not valid!"); } if ($value != "" && $value >= $parameters[0]) { return false; } return true; }
      
      





2番目の例。 期限付きのタスクを作成する必要があります。 最短の締め切りは4時間です。 ルールを作成します。



 $date = Carbon::now()->addHours(4)->timestamp; $rules = [ "deadline" => "required|numeric|after_timestamp:".$date ];
      
      





新しいルールが登場しました-“ after_timestamp”。 バリデーターで処理します:



 public function validateAfterTimestamp($attribute, $value, $parameters) { $value = (int)$value; if ((int)$parameters[0] <= 0) { throw new \Exception("Timestamp parameter in the beforeTimestamp validator not valid!"); } if ($value != "" && $value <= $parameters[0]) { return false; } return true; }
      
      





バリデーターを接続するために、app / ProvidersフォルダーにServiceProviderを作成しました-CustomValidateServiceProvider.php



 <?php namespace Lame\Providers; use Illuminate\Support\ServiceProvider; use Lame\Extensions\Validators\TimestampValidator; use Validator; class CustomValidateServiceProvider extends ServiceProvider { /** * Bootstrap any application services. * * @return void */ public function boot() { Validator::resolver(function ($translator, $data, $rules, $messages) { return new TimestampValidator($translator, $data, $rules, $messages); }); } /** * Register any application services. * * @return void */ public function register() { // } }
      
      





それは基本的にそれです。 エラーメッセージはvalidation.phpファイルに示されています。



 "custom" => [ "deadline" => [ "after_timestamp" => "Deadline should be minimum 4 hours" ], "bDay" => [ "before_timestamp" => "Age should be minimum 10 years", "numeric" => "Birthday date should be in timestamp" ] ]
      
      





フルクラスコード
 <?php namespace Lame\Extensions\Validators; use Illuminate\Validation\Validator; class TimestampValidator extends Validator { #region timestamp valitators - after_timestamp:{timestamp} | before_timestamp:{timestamp} /** * @param $attribute * @param $value * @param $parameters = ["date" => "Date before which should be input timestamp"] * @return bool * @throws \Exception */ public function validateBeforeTimestamp($attribute, $value, $parameters) { $value = (int)$value; if ((int)$parameters[0] <= 0) { throw new \Exception("Timestamp parameter in the beforeTimestamp validator not valid!"); } if ($value != "" && $value >= $parameters[0]) { return false; } return true; } /** * @param $attribute * @param $value * @param $parameters = ["date" => "Date before which should be input timestamp"] * @return bool * @throws \Exception */ public function validateAfterTimestamp($attribute, $value, $parameters) { $value = (int)$value; if ((int)$parameters[0] <= 0) { throw new \Exception("Timestamp parameter in the beforeTimestamp validator not valid!"); } if ($value != "" && $value <= $parameters[0]) { return false; } return true; } #endregion }
      
      







dateafterbeforeタイムスタンプの使用は検証できません。 または確認できますか? 可能であれば、コメントとメッセージの既存のオプションを読んでうれしいです。



All Articles