2017-11-21 2 views
1

手動認証を検討してください。 注文IDがデータベースに発見されていない場合、我々は、入力フィールドで、エラー'wrongOrderId'でページにユーザーをリダイレクトします。この例ではLaravel:エラーメッセージなしでカスタムエラーでリダイレクト

public function login(Request $request) { 

    $inputted_orderId = $request->input('order_id');  
    $orderIdInDB = DB::table(self::SITE_IN_DEVELOPMENT_TABLE_NAME) 
      ->where(self::ORDER_ID_FIELD_NAME, $inputted_orderId)->first(); 

    if (is_null($orderIdInDB)) { 
     return Redirect::route('loginToSitesInDevelopmentZonePage')->withErrors('wrongOrderId'); 
    }    
} 

、我々はエラーメッセージを渡す必要はありませ:メッセージボックスは既にビューに存在します。私たちが必要なのは、ユーザーがエラー'wrongOrderId'にリダイレクトされたこのメッセージボックスを表示することです:すべてのコードの上に

@if (!empty($errors->first('wrongOrderId'))) 
    <div class="signInForm-errorMessagebox" id="invalidID-errorMessage"> 
     <!-- ... --> 
    </div> 
@endif 

がlaravel/PHPエラーなしで働いています。間違った注文番号を入力するとis_null($orderIdInDB) if-blockに入りますが、エラーメッセージボックスは表示されません。私はたくさんの方法を試しましたが、(!empty($errors->first('wrongOrderId')))は最後の1つです。私は何が間違っていますか?

答えて

1

{{$errors->first()}}を印刷しましたか?

first(string)は、キーと値のペアとして動作しますが、それはあなたがバリデータエラーから特定のエラーを取得したい場合は

get()メソッドを使用し、

@if($errors->any()) 
    <div class="signInForm-errorMessagebox" id="invalidID-errorMessage"> 
     <!-- ... --> 
    </div> 
@endif 
+0

なりの答えをありがとう! '$ errors-> first()'を正常に表示しました。 '@if($ errors-> any())'も動作します。特定のエラーを確認する方法、私はuser2486の答えで学んだ。 –

0

、これを試して、その最初のキーの値を呼び出します。

$errors->get('wrongOrderId');wrongOrderIdすべてのエラーを取得してください。

$errors->first('wrongOrderId');は、私は$errors->first('wrongOrderId')が非表示が、非null値を持っていることを探求wrongOrderIdエラー

+0

ありがとうございました。うーん... '$ errors-> first( 'wrongOrderId');'を試しても、エラーはまだ現れません。 ' - > withErrors( 'wrongOrderId');'あなたの解決策でOKですか?また、私は '$ errors-> get( 'wrongOrderId');'を試してみたところ、 'htmlspecialchars()はパラメータ1が文字列で配列があると期待しています。 '{{$ errors-> first()}}'が動作しています: 'wrongOrderId'が表示されています。 –

+1

このコードは、コントローラではなくブレードPHPで使用してください。 '{{}}'や '{!! !!} ' –

0

の最初のエラーが発生します。だから@if ($errors->first('wrongOrderId') !== null)が動作します。

@if ($errors->first('wrongOrderId'))のようにもっとエレガントになるものはありますか?残念ながら、一つだけ、このチェックは十分ではありません。私たちは

return Redirect::route('loginToSitesInDevelopmentZonePage')->withErrors(['wrongOrderId' => true]); 

を定義した場合でも、PHPは、だから、@if ($errors->first('wrongOrderId') == true)意志の作業をtrue 1に変換しますが、@if ($errors->first('wrongOrderId'))はしません。

しかし、我々はbool$errors->first('wrongOrderId')をキャストすることができますので、最もエレガントな解決策は

@if ((bool) $errors->first('wrongOrderId'))

関連する問題