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}
我会复制相关代码,然后我会解释问题。
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}