Laravel 5 走错路了?

Laravel 5 misroute?

我会复制相关代码,然后我会解释问题。

routes.php

get('/movies/create', 'MovieController@create');

Moviecontroller.php

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

master.blade.php

<html>
<head>
    <title>Laravel</title>
</head>
<body>
@yield('content')
</body>
</html>

edit.blade.php

@extends('master')

@section('content')
    <h1>Edit {{ $movie->name }}</h1>

    {!! Form::model($movie, ['url' => '/movies/' . $movie->id, 'method' => 'PATCH']) !!}
        {!! Form::text('name') !!}
        {!! Form::text('director') !!}
        {!! Form::textarea('description') !!}
        {!! Form::text('rating') !!}
        {!! Form::submit('Update movie') !!}
    {!! Form::close() !!}
@stop

show.blade.php

@extends('master')

@section('content')
    <h1>{{ $movie->name }}</h1>
    <h4>Director: {{ $movie->director }}</h4>
    <h4>Rating: {{ $movie->rating }}</h4>
    <p>Description: {{ $movie->description }}</p>
    {!! link_to('/movies/' . $movie->id . '/edit', 'Edit') !!}
@stop

所以我有这段代码,但是当我在浏览器中转到 /movies/create 时,它试图打开 show.blade.html,这当然会抛出异常($movie does not exist ).为什么会这样?

您显示的路线上方可能存在冲突路线,如下所示:

get('/movies/{movie}', 'MovieController@show');
get('/movies/create', 'MovieController@create');

因此,当您在浏览器中转到 yoursite.com/movies/create 时,会触发第一个路由,并且控制器会打开 show.blade.php - 但还没有要显示的电影。

如果您以相反的方式移动它们,创建方法将按预期工作,您仍然可以显示现有电影:

get('/movies/create', 'MovieController@create');
get('/movies/{movie}', 'MovieController@show');

最佳方式:

php artisan make:controller MovieController

并定义路线

Route::resource('movies', 'MovieController');


//available routes
    Verb            Path    
    GET             /movies
    GET             /movies/create   
    POST            /movies
    GET             /movies/{id}          
    GET             /movies/{id}/edit   
    PUT/PATCH       /movies/{id}    
    DELETE          /movies/{id}