Route::resource和Form
关于Route::resourceapp/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 |+--------+----------+--------------------+------+------------------------------------------------+------------+ 改为使用resourceapp/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 在controller里面编写edit方法,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 创建edit的blade模板resources/views/articles/edit.blade.php@extends('layout.app')@section('content')
查看数据库 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 编辑PATCH method确认edit模板和edit方法是正常之后,再次修改edit模板 resources/views/articles/edit.blade.php@extends('layout.app')@section('content')
检查网页源代码 < !DOCTYPE html> 关于Form-Model-Binding将 {!! 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> |