Laravel 中的规则验证问题
Problems with validation of rules in Laravel
我在验证 Laravel 规则时遇到问题。我有这个 CRUD,它接收一个请求类型作为参数。我还建立了一个StoreMultipleForm,因为我有两个表单需要同时有效。这对于 SAVE 工作正常,但是,对于 INSERT,它给出的错误与我的 CRUD 请求冲突:
Argument 1 passed to App\Http\Controllers\Admin\MedicosController::inserir() must be an instance of App\Http\Requests\StoreMultipleForm, instance of Illuminate\Http\Request given, called in /var/www/html/mateus/laravel/laravel-angular/app/Http/Controllers/CrudController.php on line 23
这是我的代码
CrudController.php
public function action(Request $request, $action = null, $id = null)
{
if($action === null){
return $this->index($id);
}
if (!in_array($action, $this->allowedMethods)) {
return abort(404);
}
return $this->$action($request, $id);
}
UserController.php
//TYPE STOREFORMREQUEST ERROR!
public function insert(StoreFormRequest $request){
$user = new User;
$user->med_crm = $request->med_crm;
$user->med_juridico = $request->med_juridico;
$user->med_name = $request->med_name;
$user->save();
}
public function save(StoreFormRequest $request){
$user = new User;
$user->med_crm = $request->med_crm;
$user->med_juridico = $request->med_juridico;
$user->med_name = $request->med_name;
$user->save();
}
代码当然不是,但重要的是参数以及为什么 SAVE 有效而 INSERT 无效。
这是我的 StoreMultipleForm
class StoreMultipleForm extends FormRequest
{
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
$formRequests = [
MedicoFormRequest::class,
ConsultorioFormRequest::class,
//PacienteFormRequest::class
];
$rules = [];
foreach ($formRequests as $source) {
$rules = array_merge(
$rules,
(new $source)->rules()
);
}
return $rules;
}
public function messages()
{
$formRequests = [
MedicoFormRequest::class,
ConsultorioFormRequest::class,
//PacienteFormRequest::class
];
$messages = [];
foreach ($formRequests as $source) {
$messages = array_merge(
$messages,
(new $source)->messages()
);
}
return $messages;
}
}
我的路线
$this->group(['middleware' => ['auth'], 'namespace' => 'Admin'],
function(){
$this->get('/admin', 'AdminController@index')->name('admin.home');
$this->post('/admin/medicos/salvar/{id?}', 'MedicosController@salvar')->name('medicos');
$this->any('/admin/medicos/{action?}/{id?}', 'MedicosController@action')->name('medicos');
$this->get('/admin/util/cidades/{uf_id}', 'UtilController@getCidadesByUf')->name('cidades');
$this->get('/admin/especialidades/areasatuacoes/{esp_id}', 'EspecialidadeController@getAreasDeAtuacaoByEspecialidade')->name('areasatuacoes');
$this->any('/admin/pacientes/{action?}/{id?}', 'PacientesController@action')->name('pacientes');
$this->any('/admin/anuidades/{action?}/{id?}', 'AnuidadesController@action')->name('anuidades');
});
save和insert在真实代码中是不一样的,这里只是举例。 MedicoFormRequest 是其他 Request,StoreFormRequest 是 MedicoFormRequest 和 ConsultorioFormRequest 之间的连接点。我的问题是 SAVE 方法有效,但是 INSERT 无效。
基础 Http 请求 class 被注入到您的 CrudController::action 方法中,并且操作方法试图将其传递给 UserController::insert 方法,但是,该方法需要一个 StoreFormRequest class,这是请求 class.
的更具体的实现
这种方法行不通,因为您无法将基础 class 实例转换为子 class 实例。
我在验证 Laravel 规则时遇到问题。我有这个 CRUD,它接收一个请求类型作为参数。我还建立了一个StoreMultipleForm,因为我有两个表单需要同时有效。这对于 SAVE 工作正常,但是,对于 INSERT,它给出的错误与我的 CRUD 请求冲突:
Argument 1 passed to App\Http\Controllers\Admin\MedicosController::inserir() must be an instance of App\Http\Requests\StoreMultipleForm, instance of Illuminate\Http\Request given, called in /var/www/html/mateus/laravel/laravel-angular/app/Http/Controllers/CrudController.php on line 23
这是我的代码
CrudController.php
public function action(Request $request, $action = null, $id = null)
{
if($action === null){
return $this->index($id);
}
if (!in_array($action, $this->allowedMethods)) {
return abort(404);
}
return $this->$action($request, $id);
}
UserController.php
//TYPE STOREFORMREQUEST ERROR!
public function insert(StoreFormRequest $request){
$user = new User;
$user->med_crm = $request->med_crm;
$user->med_juridico = $request->med_juridico;
$user->med_name = $request->med_name;
$user->save();
}
public function save(StoreFormRequest $request){
$user = new User;
$user->med_crm = $request->med_crm;
$user->med_juridico = $request->med_juridico;
$user->med_name = $request->med_name;
$user->save();
}
代码当然不是,但重要的是参数以及为什么 SAVE 有效而 INSERT 无效。
这是我的 StoreMultipleForm
class StoreMultipleForm extends FormRequest
{
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
$formRequests = [
MedicoFormRequest::class,
ConsultorioFormRequest::class,
//PacienteFormRequest::class
];
$rules = [];
foreach ($formRequests as $source) {
$rules = array_merge(
$rules,
(new $source)->rules()
);
}
return $rules;
}
public function messages()
{
$formRequests = [
MedicoFormRequest::class,
ConsultorioFormRequest::class,
//PacienteFormRequest::class
];
$messages = [];
foreach ($formRequests as $source) {
$messages = array_merge(
$messages,
(new $source)->messages()
);
}
return $messages;
}
}
我的路线
$this->group(['middleware' => ['auth'], 'namespace' => 'Admin'],
function(){
$this->get('/admin', 'AdminController@index')->name('admin.home');
$this->post('/admin/medicos/salvar/{id?}', 'MedicosController@salvar')->name('medicos');
$this->any('/admin/medicos/{action?}/{id?}', 'MedicosController@action')->name('medicos');
$this->get('/admin/util/cidades/{uf_id}', 'UtilController@getCidadesByUf')->name('cidades');
$this->get('/admin/especialidades/areasatuacoes/{esp_id}', 'EspecialidadeController@getAreasDeAtuacaoByEspecialidade')->name('areasatuacoes');
$this->any('/admin/pacientes/{action?}/{id?}', 'PacientesController@action')->name('pacientes');
$this->any('/admin/anuidades/{action?}/{id?}', 'AnuidadesController@action')->name('anuidades');
});
save和insert在真实代码中是不一样的,这里只是举例。 MedicoFormRequest 是其他 Request,StoreFormRequest 是 MedicoFormRequest 和 ConsultorioFormRequest 之间的连接点。我的问题是 SAVE 方法有效,但是 INSERT 无效。
基础 Http 请求 class 被注入到您的 CrudController::action 方法中,并且操作方法试图将其传递给 UserController::insert 方法,但是,该方法需要一个 StoreFormRequest class,这是请求 class.
的更具体的实现这种方法行不通,因为您无法将基础 class 实例转换为子 class 实例。