Laravel 5 Запрос - изменение данных
Я столкнулся с примером, где мне нужно изменить данные, которые должны быть проверены, то есть, когда не было отправлено ни одного слага, создать его из заголовка, а затем проверить, что оно уникально.
В запросе есть метод replace()
который должен заменить входные данные по запросу, но он не работает. Кто-нибудь может пролить свет на это? Вот что у меня есть:
<?php namespace Purposemedia\Pages\Http\Requests;
use Dashboard\Http\Requests\Request;
use Illuminate\Auth\Guard;
class PageRequest extends Request {
/**
* [authorize description]
* @return {[type]} [description]
*/
public function authorize( Guard $auth) {
return true;
}
/**
* [rules description]
* @return {[type]} [description]
*/
public function rules() {
// Get all data from request
$data = $this->request->all();
if( $data['slug'] === '' ) {
// if the slug is blank, create one from title data
$data['slug'] = str_slug( $data['title'], '-' );
// replace the request data with new data to validate
$this->request->replace( $data );
}
return [
'title' => 'required|min:5|max:255',
'slug' => 'min:5|max:255|alpha_dash|unique:pages,slug' . $this->getSegmentFromEnd(),
];
}
}
1 ответ
Вы должны сделать это в formatInput
метод. Данные, которые вы возвращаете в этом методе, будут использованы для проверки валидатором:
Например:
protected function formatInput()
{
$data = $this->all();
if( $data['slug'] === '') {
// if the slug is blank, create one from title data
$data['slug'] = str_slug( $data['title'], '-' );
}
return $data;
}
РЕДАКТИРОВАТЬ
Этот метод был в Laravel 2 месяца назад (я все еще использую эту версию), это довольно странно, он был удален.
Тот же эффект, который вы должны получить, когда вы измените вышеуказанный метод на:
public function all()
{
$data = parent::all();
if( $data['slug'] === '') {
// if the slug is blank, create one from title data
$data['slug'] = str_slug( $data['title'], '-' );
}
return $data;
}
EDIT2
Я положил здесь весь рабочий TestRequest
учебный класс. Отправляю пустые данные и из-за измененных all()
метод, даже если пустые данные, проверка проходит, потому что я вручную установил эти данные для проверки. Если я уберу это all()
метод и отправить пустые данные, конечно, я буду отображать ошибки
<?php 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 rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
//
'title' => 'required|min:2|max:255',
'slug' => 'min:2|max:255'
];
}
public function response(array $errors){
dd($errors);
}
public function all(){
$data = parent::all();
$data['title'] = 'abcde';
$data['slug'] = 'abcde';
return $data;
}
}