@alehandry

Как исправить ошибку Missing required parameter?

Не могу исправить следующую ошибку:

66453e467fb3b258567565.png
ServicesController.php
<?php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use App\Models\Services;
use Illuminate\Http\Request;

class ServicesController extends Controller
{
    public function index()
    {
        $allservices = Services::orderBy('title', 'desc')->get();

        return view('admin.services.index', [
            'allservices' => $allservices
        ]);
    }

    public function create()
    {
        return view('admin.services.create');
    }

    public function store(Request $request)
    {
        $new_service = new Services();
        $new_service->title = $request->title;
        $new_service->text = $request->description;
        $new_service->image = $request->image;

        $new_service->save();

        return redirect()->back()->withSuccess('Услуга была успешно добавлена');
    }

    public function edit(Services $services)
    {
        return view('admin.services.edit', [
            'services' => $services
        ]);
    }

    public function update(Request $request, Services $services)
    {
        $services->title = $request->title;
        $services->text = $request->description;
        $services->image = $request->image;

        $services->save();

        return redirect()->back()->withSuccess('Услуга была успешно обновлена');
    }
}

index.blade.php
@extends('layouts.admin_layout')

@section('title', 'Все услуги')

@section('content')

    <!-- Content Header (Page header) -->
    <div class="content-header">
        <div class="container-fluid">
            <div class="row mb-2">
                <div class="col-sm-6">
                    <h1 class="m-0">Все услуги</h1>
                </div><!-- /.col -->
            </div><!-- /.row -->
        </div><!-- /.container-fluid -->
    </div>
    <!-- /.content-header -->

    <!-- Main content -->
    <section class="content">
        <div class="container-fluid">
            <div class="card">
                <div class="card-body p-0">
                    <table class="table table-striped projects">
                        <thead>
                            <tr>
                                <th style="width: 1%">ID</th>
                                <th style="width: 20%">Название</th>
                                <th style="width: 30%">Описание</th>
                                <th style="width: 20%">Изображение</th>
                                <th style="width: 20%"></th>
                            </tr>
                        </thead>
                        <tbody>
                            @foreach ($allservices as $services)
                            <tr>
                                <td>{{ $services['id'] }}</td>
                                <td>{{ $services['title'] }}</td>
                                <td>{{ $services['text'] }}</td>
                                <td>{{ $services['image'] }}</td>
                                <td class="project-actions text-right">
                                    <a class="btn btn-primary btn-sm" href="#"><i class="fas fa-folder"></i>Просмотр</a>
                                    <a class="btn btn-info btn-sm" href="{{ route('services.edit', $services['id']) }}"><i class="fas fa-pencil-alt"></i>Изменить</a>
                                    <a class="btn btn-danger btn-sm" href="#"><i class="fas fa-trash"></i>Удалить</a>
                                </td>
                            </tr>
                            @endforeach
                        </tbody>
                    </table>
                </div>
                <!-- /.card-body -->
            </div>
        </div><!-- /.container-fluid -->
    </section>
    <!-- /.content -->
@endsection

edit.blade.php
@extends('layouts.admin_layout')

@section('title', 'Редактирование услуги')

@section('content')
    <!-- Content Header (Page header) -->
    <div class="content-header">
        <div class="container-fluid">
            <div class="row mb-2">
                <div class="col-sm-6">
                    <h1 class="m-0">Редактирование услуги: {{ $services['title'] }}</h1>
                </div><!-- /.col -->
            </div><!-- /.row -->
            @if (session('success'))
                <div class="alert alert-success" role="alert">
                    <button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
                    <h4><i class="icon fa fa-check"></i>{{ session('success') }}</h4>
                </div>
            @endif
        </div><!-- /.container-fluid -->
    </div>
    <!-- /.content-header -->

    <!-- Main content -->
    <section class="content">
        <div class="container-fluid">
            <div class="row">
                <div class="col-lg-12">
                    <div class="card card-primary">
                        <!-- form start -->
                        <form action="{{ route('services.update', $services['id']) }}" method="POST">
                            @csrf
                            @method('PUT')
                            <div class="card-body">
                                <div class="form-group">
                                    <label for="exampleInputEmail1">Наименование</label>
                                    <input type="text" value="{{ $services['title'] }}" name="title"
                                        class="form-control" id="exampleInputEmail1" placeholder="Введите название услуги"
                                        required>
                                </div>
                                <div class="form-group">
                                    <label for="exampleInputPassword1">Описание</label>
                                    <input type="text" value="{{ $services['text'] }}" name="description"
                                        class="form-control" id="exampleInputPassword1"
                                        placeholder="Введите описание услуги" required>
                                </div>
                                <div class="form-group">
                                    <label for="exampleInputFile">Изображение</label>
                                    <div class="input-group">
                                        <div class="custom-file">
                                            <input type="file" value="{{ $services['image'] }}" name="image"
                                                class="custom-file-input" id="exampleInputFile">
                                            <label class="custom-file-label" for="exampleInputFile">Choose file</label>
                                        </div>
                                        <div class="input-group-append">
                                            <span class="input-group-text">Upload</span>
                                        </div>
                                    </div>
                                </div>
                                <div class="form-check">
                                    <input type="checkbox" class="form-check-input" id="exampleCheck1">
                                    <label class="form-check-label" for="exampleCheck1">Check me out</label>
                                </div>
                            </div>
                            <!-- /.card-body -->

                            <div class="card-footer">
                                <button type="submit" class="btn btn-primary">Обновить</button>
                            </div>
                        </form>
                    </div>
                </div>
            </div>
        </div><!-- /.container-fluid -->
    </section>
    <!-- /.content -->
@endsection

web.php
Route::resource('services', ServicesController::class);

2024_04_15_140541_create_services_table.php
<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('services', function (Blueprint $table) {
            $table->id();
            $table->string('title');
            $table->text('text');
            $table->string('image');
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::dropIfExists('services');
    }
};
  • Вопрос задан
  • 145 просмотров
Решения вопроса 1
pickHabr
@pickHabr
Костыльных дел мастер
Привет!

Вместо index.blade.php лучше бы ты предоставил как указан маршрут в web.php (f.e.) и не весь файл, а только один этот маршрут. Точно так же и с контроллером, все остальные методы кроме update можно было бы убрать.

В ошибке сказано
URI: admin_panel/services/{service} Missing parameter: service


Я вижу несколько возможных причин:
1
action="{{ route('services.update', $services['id']) }}"
указан не на той форме, которая отправляется (надо проверить html форму прежде чем нажать сабмит, если это так то надо привести отправляемую форму в порядок)
2 в
action="{{ route('services.update', $services['id']) }}"
не всегда был
$services['id']
, а после добавления его в шаблон на фронте страница не обновлялась или закеширована (надо проверить html формы прежде чем нажать сабмит, если это так, то надо обновить страницу и проверить html формы еще раз, если в поле action все еще не подставлен айдишник, то надо выполнить php artisan view:clear на сервере и обновить страницу на фронте, если не помогает, то надо проверить, что измененный шаблон подкинут на сервер, а не лежит чисто локально
3 таблица services не имеет primary key на id (надо выполнить миграцию, которая это добавит), можешь дополнить вопрос миграцией для создания таблицы services
4 $services['id'] имеет значение null (надо дебажить и смотреть почему туда попадает такое значение, скорее всего оно будет таким потому что нужно поменять на $services->id но это не точно)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы