Отсутствует параметр маршрута для URI маршрута, использующего Laravel? - PullRequest
0 голосов
/ 13 марта 2020

Я пытаюсь создать Laravel Уведомление. Я создал таблицу под названием send_profiles. Когда Кандидат входит в систему и ищет работу, он может отправить свой профиль работы работодателю. Все эти данные находятся в таблице с именем job_seeker_profiles. Я разрабатываю приложение типа «Поиск работы».

Я создал новый класс уведомлений с именем SendProfile.php:

public function toDatabase($notifiable)
    {
        $user = Auth::user();

        return [
            'user_id' => Auth::user()->id,
            'employer_profile_id' => DB::table('send_profiles')->where('user_id', $user->id)->orderBy('id', 'desc')->offset(0)->limit(1)->get('employer_profile_id'),
        ];
    }

. Не знаю, как лучше всего узнать о go это но в любом случае это мой маршрут. web. php:

Route::get('/admin/job-seeker/search/employer/{employerId}/post-a-job/{jobPostId}/send-profile', 'AdminEmployerJobPostsController@sendProfile')->name('admin.employer.post-a-job.show.send-profile')->middleware('verified');

AdminEmployerJobPostsController. php:

public function sendProfile($employerId, $jobPostId)
{

    $user = Auth::user();

    $jobSeekerProfile = JobSeekerProfile::all()->where('user_id', $user->id)->first();

    $employerProfile = EmployerProfile::limit(1)->where('id', $employerId)->get();

    $jobPosts = JobPosts::all();

    $jobPost = JobPosts::findOrFail($jobPostId);

    $user->sendProfile()->create();

    $employerProfile->notify(new SendProfile());

    return back()->with('send-profile', 'Your Profile has been sent!');

}

Это моя ошибка:

Отсутствуют обязательные параметры для [Маршрут : admin.employer.post-a-job.show.send-profile] [URI: admin / ищущий работу / поиск / работодатель / {EmployerId} / post-a-job / {jobPostId} / send-profile]. (Просмотр: /Applications/XAMPP/xamppfiles/htdocs/highrjobs/resources/views/admin/employer/post-a-job/show.blade.php)

show.blade:

@extends('layouts.admin')

@section('pageTitle', 'Create a User')

@section('content')

    @include('includes.job_seeker_search_employers')

    <!-- The Modal -->
    <div class="modal" id="myModal5">
        <div class="modal-dialog">
            <div class="modal-content">

                <!-- Modal Header -->
                <div class="modal-header">
                    <h4 class="modal-title">{{ $jobPost->job_title }}</h4>
                    <button type="button" class="close" data-dismiss="modal">&times;</button>
                </div>

                <!-- Modal body -->
                <div class="modal-body">
                    <h5>{{ $jobPost->job_description }}</h5>
                </div>

                <!-- Modal footer -->
                <div class="modal-footer">

                    {!! Form::open(['method'=>'POST', 'action'=>'AdminEmployerJobPostsController@sendProfile', 'files'=>true, 'style'=>'width: 100%;']) !!}

                    <div class="form-group">
                        {!! Form::hidden('user_id', Auth::user()->id, ['class'=>'form-control']) !!}
                    </div>

                    <div class="form-group">
                        {!! Form::hidden('employer_profile_user_id', $employerProfile->id, ['class'=>'form-control']) !!}
                    </div>

                    <div class="row">
                        <div class="col">
                            {!! Form::button('Back', ['class'=>'btn btn-danger btn-block float-left', 'data-dismiss'=>'modal']) !!}
                        </div>
                        <div class="col">
                            {!! Form::submit('Send Profile', ['class'=>'btn btn-primary btn-block float-right']) !!}

                            {!! Form::close() !!}
                        </div>
                    </div>
                    <br><br><br><br>

                </div>

            </div>
        </div>
    </div>

@stop

Если я удаляю форму, я по крайней мере не получаю сообщение об ошибке. Поэтому я думаю, что с формой есть проблема.

Для ясности, все, что мне нужно, это вставить user_id и employer_profile_id в таблицу send_profiles и затем отправить уведомление работодатель.

1 Ответ

1 голос
/ 14 марта 2020

В вашем маршруте указан запрос GET к URL-адресу, содержащему определенные параметры:

/admin/job-seeker/search/employer/{employerId}/post-a-job/{jobPostId}/send-profile

Ваша форма использует AdminEmployerJobPostsController@sendProfile в качестве действия; это преобразуется в URL путем поиска в списке маршрутов и выбора наиболее подходящего Laravel. Поскольку вы не передали ничего для заполнения параметров employerId и jobPostId, вы получаете эту ошибку при генерации URL.

Даже если бы вы могли получить сгенерированный URL, вы бы получили проблема в том, что ваша форма отправляет запрос POST на этот маршрут GET.

Что вам нужно сделать, это убедиться, что у вас есть маршрут POST, указывающий на новый метод контроллера. Вы не будете передавать никакие параметры этому маршруту в URL-адресе, поэтому ваш метод контроллера обычно принимает объект Request в качестве параметра. Второе, что вы должны сделать, это указать цель вашей формы более точно. Передавайте название маршрута вместо того, чтобы угадывать его.

public function sendProfile(Request $request)
{
    // you get this here so no need to pass it in the form
    $user = Auth::user();

    // your relations should be set up so you don't need to do this:
    // $jobSeekerProfile = JobSeekerProfile::all()->where('user_id', $user->id)->first();
    // instead do this:
    $jobSeekerProfile = $user->jobSeekerProfile();

    // a simple find is much neater than what you had
    $employerProfile = EmployerProfile::find($request->job_seeker_profile_user_id);

    // not sure why this is here?
    $jobPosts = JobPosts::all();

    // also your form isn't passing a job post ID
    $jobPost = JobPosts::findOrFail($request->jobPostId);

    // ??? creating an empty something?
    $user->sendProfile()->create();

    $employerProfile->notify(new SendProfile());

    return back()->with('send-profile', 'Your Profile has been sent!');

}
...