Запрос проверки Laravel и параметр POST маршрута APIPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Запрос проверки Laravel и параметр POST маршрута API

Сообщение Anonymous »

У меня возникла небольшая проблема с проверкой запроса формы и с тем, как справиться с ней с помощью одного маршрута API.

Ресурс, который мне нужно создать, зависит от другого ресурс.

(Здесь настройки электронной почты принадлежат арендатору)

Поэтому внешний вид моего маршрута должен быть каким-то например: /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');
}
Таким образом, tenantId передается как параметр, а не в тексте запроса, чтобы соблюдать соглашение REST.
Но проблема в моем контроллере: когда я объединяю данные для создания ресурса, проверка уже произошла только для данных тела перед слиянием.

Код: Выделить всё

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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»