Вы сделали несколько ошибок и что-то упустили.
Как я знаю, у вас есть несколько компаний, и у каждой Company
есть несколько JobPost
с.
Во-первых, вы не должны указывать идентификатор своей компании в теле запроса о вакансии, вместо этого маршрут вашего магазина должен быть примерно таким: https://example.com/company/{company_id}/job-post
, тогда вы сможете поймать модель компании через привязку модели Laravel!
поэтому ваши маршруты должны быть определены как:
Route::group(['prefix' => 'company', 'as' => 'company.'], function () {
Route::group(['prefix' => '{company}'], function () {
Route::resource('job-post', 'JobPostController', ['parameters' => ['job-post' => 'jobPost']);
});
Route::resource('', 'ComapnyController', ['parameters' => ['' => 'company']);
}
И ваш контроллер выглядит так (я объясню JobPostRequest
второй частью ответа):
class JobPostController extends Controller
{
public function store(JobPostRequest $request, Company $company)
{
$this->authorizeApi('store', [JobPost::class, $company]);
// the rest...
}
}
Во-вторых, вам нужен класс Request, чтобы выполнять проверки для вас.
на основе документации сначала вам нужно создать класс Request
, а затем запустить php artisan make:request JobPostRequest
Тогда ваш запрос на вакансию должен выглядеть примерно так:
class BaseRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'title' => 'required|max:255',
'body' => 'required|max:65535',
];
}
}
Вы также можете сделать то, что вы сделали в своей политике, в методе authorize
выше, но не рекомендуется.
В-третьих, в вашей политике (JobPostPloicy
) вам нужно будет проверить, может ли пользователь, вошедший в систему в данный момент, опубликовать работу для данного $company
или нет.
P.S. Пожалуйста, полностью скопируйте и пропустите ваши уроки со всеми зависимостями и потратьте немного больше времени, чтобы украсить свой пост. Если вам сложно написать свой вопрос, его трудно прочитать, понять и правильно ответить на него.