Ես բախվում եմ Ձևաթղթի խնդրանքի վավերացման և այն API-ի մեկ երթուղու հետ վարվելու մի փոքր խնդրի հետ:
Այն ռեսուրսը, որը ես պետք է ստեղծեմ, կախված է մեկ այլ ռեսուրսից:
(Այստեղ էլփոստի կարգավորումները պատկանում են վարձակալին)
Այսպիսով, իմ երթուղու տեսքը պետք է լինի նման՝ /api/tenants/{id}/email_settings
Եվ իմ խնդրանքի վավերացումը ակնկալում է մի քանի դաշտեր, ներառյալ վարձակալի ID-ն.
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 կոնվենցիան: Բայց խնդիրը իմ Controller-ում է, երբ ես միաձուլում եմ տվյալները ռեսուրսը ստեղծելու համար, վավերացումն արդեն կատարվել է միայն մարմնի տվյալների վրա մինչև միաձուլումը:
public function store(EmailSettingValidation $request, $tenant_id) {
$emailSetting = $this->emailSettingService->create(
array_merge($request->all(), compact($tenant_id))
);
return $this->response->created($emailSetting);
}
Այսպիսով, ո՞րն է այն ճիշտ վարվելու լավագույն միջոցը:
- Անցնե՞լ ID-ն մարմնի մեջ: Թվում է, թե խառնաշփոթ
- Օգտագործե՞լ Validator-ը ձեռքով վավերացնելու համար: Ես կնախընտրեի պահպանել Ձևի վավերացումը
- Հեռացնե՞լ tenantId կանոնը և ստուգել այն ձեռքով:
Որևէ առաջարկություն: Շնորհակալություն
web
միջնակարգ ծրագրերի խումբը ներառում է\Illuminate\Routing\Middleware\SubstituteBindings::class,
-ը: 09.11.2018api
խումբը ներառում է'bindings'
-ը: Այն պետք է լռելյայն 09.11.2018{id}
երթուղու պարամետրը՝{tenant}
, ճի՞շտ է: 09.11.2018