时间:2021-07-01 10:21:17 帮助过:26人阅读
app/Http/routes.phpRoute::group(['middleware' => ['web']], function () { Route::get('/articles','ArticlesController@index'); Route::get('/articles/create','ArticlesController@create'); Route::get('/articles/{id}','ArticlesController@show'); Route::post('/articles','ArticlesController@store'); Route::get('/articles/{id}/edit','ArticlesController@edit');});
一般我们的一个普通网站的文章有这些url,这些url分别是文章编辑,创建,查看列表,查看文章内容等,laravel框架对于这些有规律的url做了一个叫RESTful Resource Controllers的可重用的资源控制器
php artisan route:list //用这个命令可以查看当前laravel项目的路由情况+--------+----------+--------------------+------+------------------------------------------------+------------+| Domain | Method | URI | Name | Action | Middleware |+--------+----------+--------------------+------+------------------------------------------------+------------+| | POST | articles | | App\Http\Controllers\ArticlesController@store | web || | GET|HEAD | articles | | App\Http\Controllers\ArticlesController@index | web || | GET|HEAD | articles/create | | App\Http\Controllers\ArticlesController@create | web || | GET|HEAD | articles/{id} | | App\Http\Controllers\ArticlesController@show | web || | GET|HEAD | articles/{id}/edit | | App\Http\Controllers\ArticlesController@edit | web |+--------+----------+--------------------+------+------------------------------------------------+------------+
app/Http/routes.phpRoute::group(['middleware' => ['web']], function () { Route::resource('/articles','ArticlesController'); //将之前的一批路由改为这个。}); php artisan route:list+--------+-----------+--------------------------+------------------+-------------------------------------------------+------------+| Domain | Method | URI | Name | Action | Middleware |+--------+-----------+--------------------------+------------------+-------------------------------------------------+------------+| | GET|HEAD | articles | articles.index | App\Http\Controllers\ArticlesController@index | web || | POST | articles | articles.store | App\Http\Controllers\ArticlesController@store | web || | GET|HEAD | articles/create | articles.create | App\Http\Controllers\ArticlesController@create | web || | DELETE | articles/{articles} | articles.destroy | App\Http\Controllers\ArticlesController@destroy | web || | PUT|PATCH | articles/{articles} | articles.update | App\Http\Controllers\ArticlesController@update | web || | GET|HEAD | articles/{articles} | articles.show | App\Http\Controllers\ArticlesController@show | web || | GET|HEAD | articles/{articles}/edit | articles.edit | App\Http\Controllers\ArticlesController@edit | web |+--------+-----------+--------------------------+------------------+-------------------------------------------------+------------+//再次查看路由,依旧会生成这些有规律的常用的路由list,不过需要注意一些路由,有些是用了PATCH方法,这个是因为浏览器本身只支持get和post,对于其他的方法是无法处理的,所以laravel会在表单的里面提供支持这些其他的方法的语法,当然,在这里我们只需要知道有这些路由,这些路由有这些方法
详情参考:https://laravel.com/docs/5.2/controllers#restful-resource-controllers
app/Http/Controllers/ArticlesController.php public function edit($id){ $article = Articles::findOrFail($id); //findOrFail方法是laravel的model的提供的可以处理model数据的方法,而model是直接关联数据库的,所以可以理解为直接操作数据库的方法 //这里是查找主键为$id的项,然后返回一个model return view('articles.edit',compact('article')); }
以下是findOrFail的介绍
Model|Collection findOrFail(mixed $id, array $columns = array('*'))Find a model by its primary key or throw an exception.Parametersmixed $id array $columns Return ValueModel|Collection
resources/views/articles/edit.blade.php@extends('layout.app')@section('content'){{$article->title}}
//用这里来验证是否能够查找到$article的title信息 @if($errors->any())
查看数据库
id title content publish_at created_at updated_at5 我是一篇新文章 你好 2016-05-21 00:00:00 2016-05-21 07:32:48 2016-05-21 07:32:48
在浏览器访问http://localhost:8000/articles/5/edit出来的是正确的title
确认edit模板和edit方法是正常之后,再次修改edit模板
resources/views/articles/edit.blade.php@extends('layout.app')@section('content'){{$article->title}}
{!! Form::open(['method'=>'PATCH','url'=>'/articles'.$article->id]) !!} //因为之前的提到的用resource路由,其中有一个路由是用PATCH方法的,所以在这里写{!! Form::label('title', 'Title:') !!} {!! Form::text('title', null, ['class' => 'form-control']) !!}{!! Form::label('content', 'Content:') !!} {!! Form::textarea('content', null, ['class' => 'form-control']) !!}{!! Form::label('publish_at', 'publish_at:') !!} {!! Form::date('publish_at', date('Y-m-d'), ['class' => 'form-control']) !!}{!! Form::submit('发表文章',['class'=>'btn btn-primary form-control']) !!} {!! Form::close() !!} @if($errors->any())
检查网页源代码
< !DOCTYPE html>Laravel 我是一篇新文章
将
{!! Form::open(['method'=>'PATCH','url'=>'/articles'.$article->id]) !!}
改为
//这里需要注意的是这个就是改为Form-Model-Binding{!! Form::model($article,['method'=>'PATCH','url'=>'/articles'.$article->id]) !!}
Form-Model-Binding是将model和from进行绑定,这样可以实现自动将model的数据写入form表单,对于编辑页面,要出现编辑之前的数据的话,很有用。
再次检查网页源码
< !DOCTYPE html>Laravel 我是一篇新文章