Laravel |Проверить сгенерированное значение - PullRequest
0 голосов
/ 03 октября 2018

У меня есть конечная точка для создания данных.

Запрос "имя".Мне нужно сгенерировать "слаг" и проверить, что слаг является уникальным.Итак, скажем

таблица book_genres.

id |имя |slug

Запрос ["name" => "My first genre"].У меня есть пользовательский запрос с правилом: "name" => "string | unique: book_genres, name".Мне нужна такая же проверка на слизняк.$slug = str_slug($name);

Как я могу добавить эту проверку в мой пользовательский запрос?

Класс пользовательских запросов:

 class BookGenreCreate extends FormRequest
{

    public function authorize()
    {
        return true;
    }

    public function rules()
    {
        return [
            "name" => 'required|string|unique:book_genres,name',
        ];
    }

}

Ответы [ 2 ]

0 голосов
/ 03 октября 2018

Итак, в основном вам нужно попытаться манипулировать данными запроса до того, как произойдет проверка.Вы можете сделать это в своем классе FormRequest, переопределив один из методов, вызываемых перед проверкой.Я обнаружил, что это лучше всего работает при переопределении getValidatorInstance.Затем вы можете получить существующие данные, добавить к нему свой слаг и затем заменить данные в запросе, все до проверки:

protected function getValidatorInstance()
{
    $data = $this->all();
    $data['slug'] = str_slug($data['name']);
    $this->getInputSource()->replace($data);

    return parent::getValidatorInstance();
}

Вы также можете добавить правила для своего слага в метод правил какхорошо:

public function rules()
{
    return [
        "name" => 'required|string|unique:book_genres,name',
        "slug" => 'required|string|unique:book_genres,slug',
    ];
}

Итак, ваш класс будет выглядеть примерно так:

class BookGenreCreate extends FormRequest
{

    public function authorize()
    {
        return true;
    }

    public function rules()
    {
        return [
            'name' => 'required|string|unique:book_genres,name',
            'slug' => 'required|string|unique:book_genres,slug',
        ];
    }

    protected function getValidatorInstance()
    {
        $data = $this->all();
        $data['slug'] = str_slug($data['name']);
        $this->getInputSource()->replace($data);

        return parent::getValidatorInstance();
    }
}

Теперь, когда запрос поступит на ваш контроллер, он будет проверен, и вы сможете получить доступ к слагуиз объекта запроса:

class YourController extends Controller
{
    public function store(BookGenreCreate $request)
    {
        $slug = $request->input('slug');

        // ...
    }
}
0 голосов
/ 03 октября 2018

Вы можете добавить 'slug' к запросу, а затем использовать проверки как обычно.

rules() {

    // set new property 'slug' to the request object.
    $this->request->set('slug', str_slug($request->name));

    // rules
    return [
        'name' => 'string|unique:book_genres,name',
        'slug' => 'string|unique:book_genres,slug'
    ]
}
...