2016-05-15 2 views
4

У меня модель, как этотLaravel 5 валидации в модели

class test extends Model 
{ 

public $rules = [ 
    'title' => 'required', 
    'name' => 'required', 
]; 
protected $fillable = ['title','name']; 
} 

и контроллер, как этот

public function store(Request $request) 
{ 
    $test=new test; /// create model object 
     $validator = Validator::make($request->all(), [ 
      $test->rules 
     ]); 
     if ($validator->fails()) { 
      return view('test')->withErrors($validator) 
     } 
     test::create($request->all()); 
} 

Validation требуется показать ошибку, как этот

0 поле.

Я хочу показать, требуется это поле

Имя.
Поле заголовка обязательно.

ответ

6

Решаю это

public function store(Request $request) 
{ 
    $test=new test; /// create model object 
    $validator = Validator::make($request->all(),$test->rules); 
    if ($validator->fails()) { 
     return view('test')->withErrors($validator) 
    } 
    test::create($request->all()); 
} 
+0

Что делать, если я хочу сделать этот общий (например, API), чтобы его можно было назвать с любого вида. Как бы я передал его в ту же точку зрения (не зная). –

+0

@VeerShrivastav, может быть, вы можете написать себе вспомогательный класс? – Hackbard

0

Вы делаете это неправильно. Массив rules должен либо находиться в вашем контроллере, либо лучше в Form Request.

Позвольте мне показать вам лучший подход:

Создать новую форму запроса файл с php artisan make:request TestRequest.

Пример TestRequest Класс:

namespace App\Http\Requests; 

use App\Http\Requests\Request; 

class TestRequest extends Request 
{ 
    /** 
    * Determine if the user is authorized to make this request. 
    * 
    * @return bool 
    */ 
    public function authorize() 
    { 
     return true; 
    } 

    /** 
    * Get the validation messages. 
    * 
    * @return array 
    */ 
    public function messages() 
    { 
     return [ 
      'title.required' => 'A title is required.', 
      'name.required' => 'The name field is required' 
     ]; 
    } 

    /** 
    * Get the validation rules that apply to the request. 
    * 
    * @return array 
    */ 
    public function rules() 
    { 
     return [ 
      'title' => 'required', 
      'name' => 'required', 
     ]; 
    } 
} 

Инжектируйте объект запроса в свой метод контроллера.

public function store(TestRequest $request) 
{ 
    // You don't need any validation, this is already done 
    test::create($request->all()); 
} 
+7

почему это плохо, чтобы сохранить правила с моделью? зачем создавать дополнительный объект с запросом с регистрацией авторизации там? –

+5

Я из фона Ruby on Rails и использовал Laravel в течение нескольких лет, лично я предпочитаю подход к проверке на уровне модели по двум основным причинам: 1. Модели могут быть изменены из многих мест, кроме пользовательских входов , чтобы поддерживать целостность данных не только для пользователя, но и для всех, включая всех разработчиков в проекте. 2. Пользовательский запрос и валидаторы предназначены только для атрибутов, которые вы получили от контроллеров, они не проверяют все атрибуты модели, скажем, что, если действительная покупка из 2-х элементов делает инвентарь равным -1. – Jing

+0

Я также хотел бы знать, почему Ларавел делает это так. Хотя я думаю, что этот ответ хорош в целом, я отметил, что так «лучше» - «лучше» субъективно –

Смежные вопросы