Что вы можете сделать, это создать вход перед проверкой, например:
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
abstract class Request extends FormRequest
{
/**
* Override Symfony\Component\HttpFoundation\Request::initialize.
* After parent::initialize, run beforeValidation
*/
public function initialize(array $query = array(), array $request = array(), array $attributes = array(), array $cookies = array(), array $files = array(), array $server = array(), $content = null)
{
parent::initialize($query, $request, $attributes, $cookies, $files, $server, $content);
$this->beforeValidation();
}
protected function beforeValidation()
{
//implement in child class
}
}
class MyRequest extends Request
{
protected function beforeValidation()
{
$tag = sprintf('%s %s', $this->input('name'), $this->input('countries_id'));
$this->merge([
'tag' => $tag,
]);
}
public function rules()
{
return array(
'name' => ['required'],
'countries_id' => ['required', 'exists:mysql.countries,id'],
'tag' => ['required','unique'],
);
}
}
class MyController
{
public function myMethod(MyRequest $request)
{
//do something
}
}
Здесь мы создаем новый абстрактный класс Request, который переопределяет функцию initialize(..)
из framework. После инициализации базовый класс вызывает beforeValidation()
для запуска чего-либо до проверки. Затем мы вставляем новое входное значение tag
во входной массив и проверяем по правилу unique
.