Получить / Опубликовать web.php Создать / Сохранить Маршрут Возвращает 404 - PullRequest
0 голосов
/ 28 октября 2019

Я пытаюсь выяснить, почему мой маршрут создания возвращает ошибку 404, поскольку он дает мне только Не удалось загрузить ресурс: сервер ответил со статусом 404 (не найдено) на странице,

Маршруты показа, редактирования и обновления функционируют без проблем, и представления находятся в той же папке, что и файл create.blade.php. Мой web.php, по-видимому, распознает функцию create в контроллере, а контроллер, по-видимому, распознает файл create.blade.php, по крайней мере, из системы Follow Link кода. Я также попытался очистить блейд-файл и оставить только div, extends и section, но все равно получил 404.

web.php

Route::get('/location/{location}', 'LocationController@show')->name('location.show');
Route::get('/location/create', 'LocationController@create');
Route::post('/location', 'LocationController@store');
Route::get('/location/{location}/edit', 'LocationController@edit')->name('location.edit');
Route::patch('/location/{location}', 'LocationController@update')->name('location.update');

Location.php

<?php

namespace App;
use Illuminate\Database\Eloquent\Model;

class Location extends Model
{

    public function casino() {
        return $this->belongsTo(Casino::class);
    }

    public function duties() {
        return $this->hasMany(Duty::class)->orderBy('title', 'ASC');
    }

}

LocationController.php

<?php

namespace App\Http\Controllers;
use App\Location;
use Illuminate\Http\Request;

class LocationController extends Controller
{
    public function create() {
        return view('locations.create');
    }

    public function store() {
        $data = request()->validate([
            'title' => 'required',
        ]);
        return redirect("/casino/" . location()->casino()->id);
    }

    public function edit(Location $location) {
        return view('locations.edit', compact('location'));
    }

    public function update( Request $request, Location $location) {

        $data = request()->validate([
            'title' => 'required'
        ]);

        $location->title = $request->get('title');
        $location->save();

        return redirect("/location/{$location->id}");
    }

    public function show(Location $location) {
        return view('locations.show', compact('location'));
    }

}

create.blade.php

@extends('layouts.app')

@section('content')
<div class="container">
    <form action="/location" enctype="multipart/form-data" method="POST">
        @csrf
        <div class="row">
            <div class="col-8 offset-2">

                <div class="row pt-4">
                    <h1>Add New Location</h1>
                </div>

                <div class="form-group row">
                    <label for="title" class="col-md-4 col-form-label">Location Title</label>
                    <input id="title"
                        type="text"
                        class="form-control @error('title') is-invalid @enderror"
                        name="title"
                        value="{{ old('title') }}"
                        required autocomplete="title"
                        autofocus>

                    @error('title')
                        <span class="invalid-feedback" role="alert">
                            <strong>{{ $message }}</strong>
                        </span>
                    @enderror

                </div>

                <div class="row pt-4">
                    <button class="btn btn-primary">Add New Location</button>
                </div>
            </div>
        </div>
    </form>
</div>
@endsection

Ответы [ 2 ]

3 голосов
/ 28 октября 2019

Ваши маршруты в неправильном порядке.

Поскольку ваш маршрут показа /location/{location} находится наверху, он поймает /location/create и предполагает, что create является параметром маршрута для местоположения, которое выпытаясь просмотреть, поэтому вы никогда не достигнете действия create, а вместо этого действия show.

Помещение маршрута create выше маршрута show должно решить проблему:

Route::get('/location/create', 'LocationController@create');
Route::post('/location', 'LocationController@store');
Route::get('/location/{location}', 'LocationController@show')->name('location.show');
Route::get('/location/{location}/edit', 'LocationController@edit')->name('location.edit');
Route::patch('/location/{location}', 'LocationController@update')->name('location.update');
0 голосов
/ 28 октября 2019

Вы не создали псевдоним для вашего маршрута создания. Должно быть это?

Route::get('/location/create', 'LocationController@create')->name('location.create');
Route::post('/location', 'LocationController@store')->name('location.store');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...