好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Route::resource和Form-Model-Binding_html/css_WEB-IT

关于Route::resource

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        |+--------+----------+--------------------+------+------------------------------------------------+------------+ 

改为使用resource

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测试数据/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')    

{{$article->title}}

//用这里来验证是否能够查找到$article的title信息 @if($errors->any()) @foreach($errors->all() as $error) {{$error}} @endforeach @endif@stop

查看数据库

id  title   content publish_at  created_at  updated_at5   我是一篇新文章 你好  2016-05-21 0 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')    

{{$article->title}}

{!! Form::open(['method'=>'PATCH','url'=>'/articles'.$article->id]) !!} //因为之前的提到的用resource路由,其中有一个路由是用PATCH方法的,所以在这里写

{!! Form::label('title', 'Title:') !!} {!! Form::text('title', null, ['class' => 'form-control']) !!}

查看更多关于Route::resource和Form-Model-Binding_html/css_WEB-IT的详细内容...

  阅读:35次