У меня есть URL-адрес следующей формы:
GET /cat/{cat}/meows/{overTime}
Я могу написать метод контроллера, который выглядит так, чтобы захватить значения:
public function getMeowsOverTime(Cat cat, int overTime)
Я хотел бы проверить значения {cat}
и {overTime}
, прежде чем они попадут в метод контроллера.
Я попытался создать собственный объект MeowsOverTimeRequest
, который расширяет Illuminate\Http\Request
в соответствии с рекомендацией здесь: Laravel 5.7 - переопределить метод all() в классе проверки запроса для проверки параметров маршрута?
Итак, это будет:
class MeowsOverTimeRequest extends Request
{
public function authorize()
{
return true;
}
public function all($keys = null)
{
$request = parent::all($keys);
$request['cat'] = $this->route('cat');
$request['overTime'] = $this->route('overTime');
return $request;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'cat' =>
[
'required',
'integer'
],
'overTime' =>
[
'required',
'integer',
Rule::in(Cat::getMeowTimeOptions())
]
];
}
}
Но $this->route('cat')
и $this->route('overTime')
возвращают значение null. Как я могу получить доступ к этим переменным?
Я бы предпочел не использовать проверку регулярных выражений из-за к тому, что overTime
ограничено тем, что возвращается из Cat::getMeowTimeOptions