2015-05-02 103 views
3

一般驗證消息看起來像我的JSON響應修改Laravel驗證消息響應

"error_details": { 
    "email": [ 
     "The email field is required." 
    ], 
    "password": [ 
     "The password field is required." 
    ] 
} 

,但我要讓

"error_details": { 
    "password": "The password field is required.", 
"email": "The email field is required." 
} 
+0

如果有幫助,你可以接受我的回答以供下一位讀者使用:) –

回答

1

您可以使用array_flatten()幫手:

array_flatten($validator->getMessageBag()->getMessages()); 

這將返回所有驗證器錯誤的一維數組。

瞭解更多關於Laravel助手:http://laravel.com/docs/5.0/helpers

+0

它只會返回數組中沒有屬性名稱的消息。像[「這些字段是必需的。」] –

0

用途:

"error_details": { 
"password.required": "The password field is required.", 

「email.required」: 「電子郵件字段是必需的。」 } 它在laravel上工作4

0

我確實偶然發現了同樣的問題。這裏是我做到了

創建一個CustomMessageBag類延伸Illuminate\Support\MessageBag和覆蓋add方法

<?php 
namespace App\Extend; 

use Config; 
use Illuminate\Support\MessageBag as BaseMessageBag; 

/** 
* Extending Validation Class 
* 
*/ 

class CustomMessageBag extends BaseMessageBag{ 


    /** 
    * Add a message to the bag. 
    * 
    * @param string $key 
    * @param string $message 
    * @return $this 
    */ 
    public function add($key, $message) 
    { 
     if ($this->isUnique($key, $message)) { 
      //remove additional array 
      $this->messages[$key] = $message; 
     } 

     return $this; 
    } 

} 

然後創建一個customValidator它使用CustomMessageBag

<?php 
namespace App\Extend; 

use Input; 
use Lang; 
use Config; 
use App\Extend\CustomMessageBag as MessageBag; 


/** 
* Extending Validation Class 
* 
*/ 

class CustomValidator extends \Illuminate\Validation\Validator { 


    /** 
    * Determine if the data passes the validation rules. 
    * 
    * @return bool 
    */ 
    public function passes() 
    { 
     $this->messages = new MessageBag; 

     // We'll spin through each rule, validating the attributes attached to that 
     // rule. Any error messages will be added to the containers with each of 
     // the other error messages, returning true if we don't have messages. 
     foreach ($this->rules as $attribute => $rules) { 
      foreach ($rules as $rule) { 
       $this->validate($attribute, $rule); 
      } 
     } 

     // Here we will spin through all of the "after" hooks on this validator and 
     // fire them off. This gives the callbacks a chance to perform all kinds 
     // of other validation that needs to get wrapped up in this operation. 
     foreach ($this->after as $after) { 
      call_user_func($after); 
     } 

     return count($this->messages->all()) === 0; 
    } 
} 

最後註冊CustomValidator類在AppServiceProvider'sboot方法

<?php 

namespace App\Providers; 

use Illuminate\Support\ServiceProvider; 
use App\Extend\CustomValidator; 
use Event; 
use Mail; 
use Config; 
use Lang; 
use Log; 

class AppServiceProvider extends ServiceProvider { 

    /** 
    * Bootstrap any application services. 
    * 
    * @return void 
    */ 
    public function boot() { 
     //Register custom validator class 
     $this->app->validator->resolver(function($translator, $data, $rules, $messages) { 
      return new CustomValidator($translator, $data, $rules, $messages); 
     }); 
    } 
}