Ресурс, который мне нужно создать, зависит от другого ресурс.
(Здесь настройки электронной почты принадлежат арендатору)
Поэтому внешний вид моего маршрута должен быть каким-то например: /api/tenants/{id}/email_settings
И проверка моего запроса предполагает несколько полей, включая tenantId:
Код: Выделить всё
public function rules() {
return [
'email' => 'bail|required|email|unique:email_settings,email',
'name' => 'bail|required',
'username' => 'bail|required',
'password' => 'bail|required'
'imapHost' => 'bail|required',
'imapPort' => 'bail|required',
'imapEncryption' => 'bail|required',
'imapValidateCert' => 'bail|required',
'smtpHost' => 'bail|required',
'smtpPort' => 'bail|required',
'smtpEncryption' => 'bail|required',
'tenantId' => 'bail|required',
];
}
Код: Выделить всё
try {
const response = await this.tenantForm.post('/api/tenants')
let newTenant = helpers.getNewResourceFromResponseHeaderLocation(response)
let tenantId = parseInt(newTenant.id);
try {
await this.emailSettingsForm.post('/api/tenants/' + tenantId + '/email_settings')
this.requestAllTenants()
} catch ({response}) {
$('.second.modal').modal({blurring: true, closable: false}).modal('show');
}
} catch ({response}) {
$('.first.modal').modal({blurring: true}).modal('show');
}
Но проблема в моем контроллере: когда я объединяю данные для создания ресурса, проверка уже произошла только для данных тела перед слиянием.
Код: Выделить всё
public function store(EmailSettingValidation $request, $tenant_id) {
$emailSetting = $this->emailSettingService->create(
array_merge($request->all(), compact($tenant_id))
);
return $this->response->created($emailSetting);
}
- Передайте идентификатор в теле? Кажется беспорядочным.
- Использовать Валидатор для проверки вручную? Я бы предпочел сохранить проверку формы.
- Удалить правило tenantId и проверить его вручную?
Спасибо
Подробнее здесь: https://stackoverflow.com/questions/532 ... -parameter
Мобильная версия