18
Окт
2021

Ошибка Missing required parameter for [Route: staff.update] [URI: account/staff/{staff}] [Missing parameter: staff]

помогите решить вопрос. Использую встроенный в laravel - resource controller и resource route. Вот мои файлы: web.php

Route::group(['middleware'=>'auth'], function () {
   Route::group(['prefix' => 'account'], function () {
       Route::resource('staff', WorkerController::class);
   });
});

WorkerController.php

namespace App\Http\Controllers\User\Account\Staff\Workers;

use App\Http\Controllers\Controller;
use App\Models\Role;
use App\Models\User;
use App\Models\Worker;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class WorkerController extends Controller
{
  public function store(Request $request)
  {
     $request->validate([
         'name' => 'required|string',
         'itn' => 'required|int',
         'email' => 'required|string',
         'phone_number' => 'required|string',
         'role_id' => 'required|int'
     ]);
     $data = new Worker();

     $data->name = $request->name;
     $data->itn = $request->itn;
     $data->email = $request->email;
     $data->phone_number = $request->phone_number;
     $data->role_id = $request->role_id;
     $data->user_id = Auth::id();

     $data->save();
     return redirect()->back()->withSuccess('Пользователь успешно добавлен!');
  }

  public function edit(Worker $worker)
  {
     $roles = Role::where('user_id', Auth::id())
         ->orderBy('created_at', 'DESC')->get();

     return view('pages.user.account.staff.workers.workerEdit', [
         'worker' => $worker,
         'roles' => $roles
     ]);
  }

  public function update(Request $request, Worker $worker)
  {
     $request->validate([
         'name' => 'required|string',
         'itn' => 'required|int',
         'email' => 'required|string',
         'phone_number' => 'required|string',
         'role_id' => 'required|int'
     ]);

     $worker->name = $request->name;
     $worker->itn = $request->itn;
     $worker->email = $request->email;
     $worker->phone_number = $request->phone_number;
     $worker->role_id = $request->role_id;

     $worker->save();
     return redirect()->back()->withSuccess('Пользователь успешно отредактирован!');
  }

workerEdit.blade.php

@extends('pages.user.layouts.template')

@section('title', 'Персонал')
@section('head-title', 'Персонал')
@section('subtitle', 'Добавление, удаление, а также изменение вашего персонала')
@section('url')
    @include('pages.user.account.staff.includes.url')
@endsection

@section('content')
    <div class="pb-4">
        <div class="container-fluid px-0">
            <div class="d-flex flex-row-reverse" id="navbarSupportedContent">
                <a href="{{ route('staff.index') }}">
                    <button class="btn btn-primary" type="button">Назад</button>
                </a>
            </div>
        </div>
</div>
<div class="row">
    <div class="col-12">
        <div class="card card-body bg-white border-light shadow-sm mb-4">
            <h2 class="h5 mb-4">Карточка сотрудника</h2>
            <form action="{{ route('staff.update', $worker['id']) }}" method="POST">
                @csrf
                @method('PUT')
                <div class="row">
                    <div class="col-md-6 mb-3">
                        <div class="form-group">
                            <label for="first_name">ФИО сотрудника</label>
                            <input class="form-control @error('name') is-invalid @enderror" id="name"
                                   type="text" placeholder="ФИО сотрудника" name="name" value="{{ $worker['name'] }}">
                            <div class="invalid-feedback">@error('name'){{ $message }}@enderror</div>
                        </div>
                    </div>
                    <div class="col-md-6 mb-3">
                        <div class="form-group">
                            <label for="first_name">ИНН сотрудника</label>
                            <input class="form-control @error('itn') is-invalid @enderror" id="itn"
                                   type="number" placeholder="ИНН сотрудника" name="itn" value="{{ $worker['itn'] }}">
                            <div class="invalid-feedback">@error('itn'){{ $message }}@enderror</div>
                        </div>
                    </div>
                </div>
                <div class="row align-items-center">
                    <div class="col-md-6 mb-3">
                        <div class="form-group">
                            <label for="email">Email</label>
                            <input class="form-control @error('email') is-invalid @enderror" id="email" type="email"
                                   placeholder="Email" name="email" value="{{ $worker['email'] }}">
                            <div class="invalid-feedback">@error('email'){{ $message }}@enderror</div>
                        </div>
                    </div>
                    <div class="col-md-6 mb-3">
                        <div class="form-group">
                            <label for="email">Телефон</label>
                            <input class="form-control @error('phone_number') is-invalid @enderror" id="phone_number" type="text"
                                   placeholder="Телефон" name="phone_number" value="{{ $worker['phone_number'] }}">
                            <div class="invalid-feedback">@error('phone_number'){{ $message }}@enderror</div>
                        </div>
                    </div>
                </div>
                <div class="row">
                    <div class="col-md-6 mb-3">
                        <div class="form-group">
                            <label for="states">Должность</label>
                            <select class="form-select mb-0 @error('role_id') is-invalid @enderror" id="states"
                                    aria-label="Gender select example" name="role_id">
                                @foreach($roles as $role)
                                    <option value="{{ $role['id'] }}">{{ $role['title'] }}</option>
                                @endforeach
                            </select>
                            <div class="invalid-feedback">@error('role_id'){{ $message }}@enderror</div>
                        </div>
                    </div>
                </div>
                <div class="mt-3">
                    <button type="submit" class="btn btn-primary">Сохранить</button>
                </div>
                @if (session('success'))
                    <div class="alert alert-success" role="alert">
                        {{ session('success') }}
                    </div>
                @endif
            </form>
        </div>
    </div>
</div>
@endsection

Не понимаю в чем проблема. В роут staff.edit тоже передаю $worker['id']

<a href="{{ route('staff.edit', $worker['id']) }}">
    <button class="btn btn-sm btn-secondary" type="button">Редактировать</button>
</a>

и ссылка генерируется нормально. Ругается на эту строчку в файле workerEdit.blade.php:

<form action="{{ route('staff.update', $worker['id']) }}" method="POST">

Не понимаю что я тут не правильно указываю. Переменную передал, объект тоже существует. Помогите пожалуйста

Источник: https://ru.stackoverflow.com/questions/1339700/%D0%9E%D1%88%D0%B8%D0%B1%D0%BA%D0%B0-missing-required-parameter-for-route-staff-update-uri-account-staff

Тебе может это понравится...

Добавить комментарий