質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

解決済

1回答

2741閲覧

カスタムバリデーションで特定テーブルのカラムを参照し、それを比較対象にしたいです。

Sky_Hat

総合スコア13

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

0クリップ

投稿2017/03/14 12:54

ログイン画面を作成しております。
そこでテーブルに保存されているハッシュ化されたパスワードと、
フォームで送られたパスワードが一致していればログインが可能となるようにしたいです。

app/Providers/AppServiceProvider.phpに以下を記述しました。
$parameters[0]にテーブルに保存されているハッシュ化されたパスワードを入れたいです。

public function boot() { Validator::extend('checkHashPass', function($attribute, $value, $parameters, $validator) { if(Hash::check( $value , $parameters[0] ) ) { return false; } return true; }); }

ご回答、よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

そのままの回答、というわけではないですがログインのValidatorについては私は下記の様に実装しています。
ログインを実装するのであれば標準で使えるAuth::Attemptがおすすめです。
validatorServiceProvider.php

PHP

1<?php 2 3namespace App\Providers; 4 5use Illuminate\Support\ServiceProvider; 6use App\Services\CustomValidator; 7/** 8 * カスタムバリデーションを管理する 9 */ 10class ValidatorServiceProvider extends ServiceProvider 11{ 12 /** 13 * Bootstrap the application services. 14 * 15 * @return void 16 */ 17 public function boot() 18 { 19 /** 20 * カスタムバリデータ 21 * (バリデータにてコンストラクタインジェクションをしたい時は、下記でServiceをmakeして引数に渡すこと) 22 */ 23 \Validator::resolver(function($translator,$data,$rules,$messages){ 24 $customAttributes = array(); 25 return new CustomValidator($translator,$data,$rules,$messages,$customAttributes); 26 }); 27 } 28 29 /** 30 * Register the application services. 31 * 32 * @return void 33 */ 34 public function register() 35 { 36 // 37 } 38} 39

CustomValidator.php

PHP

1<?php 2namespace App\Services; 3use Illuminate\Validation\Validator; 4use Auth; 5/** 6 * カスタムバリデータ 7 * 8 * @author XXXXXX 9 */ 10class CustomValidator extends Validator{ 11 /** 12 * ユーザーIDとパスワードにてログインが出来るかどうかチェックする。 13 * @param type $attribute 入力されたname 14 * @param type $value 入力された値 15 * @param type $parameters パラメータ(空) 16 * @return boolean 17 */ 18 public function validateLogin($attribute,$value,$parameters){ 19 return Auth::attempt(['Name'=>$value,'password'=>$this->getValue('password')]); 20 } 21}

loginController(抜粋)

PHP

1 /** 2 * ログインボタンが押下された時の動作。エラーが無ければメインメニューへ遷移 3 * @param LoginRequest $request 4 * @return type 5 */ 6 public function login(Request $request){ 7 $this->validate($request,[ 8 'userId' => 'required|login', 9 'password' => 'required', 10 ]); 11 return redirect('/mainmenu'); 12 }

投稿2017/03/15 01:11

編集2017/03/15 01:12
motuo

総合スコア3027

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Sky_Hat

2017/03/15 10:19 編集

ご回答ありがとうございます! ご質問があります。 以下の記述で$rulesと$messagesがありますが、内容はどこで記述しているのでしょうか? \Validator::resolver(function($translator,$data,$rules,$messages){ $customAttributes = array(); return new CustomValidator($translator,$data,$rules,$messages,$customAttributes); 自分は、以下のように記述しておりました。 回答者様ので言いますと、loginController->login()の中に記述しております。 $inputs = Request::all(); //ルール $rules = [ 'user_name'=>'required', 'password'=>'required:', ]; $messages = [ 'user_name.required'=>'名前は必須です。', 'password.required'=>'パスワードは必須です。', ]; $validation = \Validator::make($inputs,$rules,$messages); //エラー次の処理 if($validation->fails()) { return redirect()->back()->withErrors($validation->errors())->withInput(); }
motuo

2017/03/15 07:38 編集

$rulesについては、バリデーションの数が少なければ前述の通り、controllerに書いています。 バリデーションの数が多い時には、別途、FormRequestを作って対応していますね。 messagesについては、基本的に「laravel/resources/lang/ja/validation.php」に統一して記述しています。 特定の画面でしか使わないもの、メッセージを一時的に変えたい場合は、やはりFormRequestに書くこともありますね。
Sky_Hat

2017/03/15 10:21

ありがとうございます! 大変、参考になります! 頑張ってみます! 丁寧にお答えしていただき、ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問