ホームページ  >  記事  >  ウェブフロントエンド  >  Route::resource と Form-Model-Binding_html/css_WEB-ITnose

Route::resource と Form-Model-Binding_html/css_WEB-ITnose

WBOY
WBOYオリジナル
2016-06-21 08:47:431137ブラウズ

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');});

通常、通常の Web サイトの記事には次の URL が付いています。これらの URL は記事の編集、作成、リストの表示、および表示に使用されます。記事の内容です。laravel フレームワークは、これらの通常の URL

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

に対して、RESTful リソース コントローラーと呼ばれる再利用可能なリソース コントローラーを作成しました。代わりに、リソース

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')    <h1>{{$article->title}}</h1> //用这里来验证是否能够查找到$article的title信息    @if($errors->any())        <ul class="list-group">            @foreach($errors->all() as $error)                <li class="list-group-item list-group-item-danger">{{$error}}</li>            @endforeach        </ul>    @endif@stop

データベースの表示

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 が正しいタイトルで表示されます

PATCH メソッドの編集

編集テンプレートと編集メソッドが正常であることを確認した後、編集テンプレートを再度変更します

resources/views/articles/edit.blade.php@extends('layout.app')@section('content')    <h1>{{$article->title}}</h1>    {!! Form::open(['method'=>'PATCH','url'=>'/articles'.$article->id]) !!} //因为之前的提到的用resource路由,其中有一个路由是用PATCH方法的,所以在这里写            <!--- Title Field --->    <div class="form-group">        {!! Form::label('title', 'Title:') !!}        {!! Form::text('title', null, ['class' => 'form-control']) !!}    </div>    <!--- Content Field --->    <div class="form-group">        {!! Form::label('content', 'Content:') !!}        {!! Form::textarea('content', null, ['class' => 'form-control']) !!}    </div>    <!---  Field --->    <div class="form-group">        {!! Form::label('publish_at', 'publish_at:') !!}        {!! Form::date('publish_at', date('Y-m-d'), ['class' => 'form-control']) !!}    </div>    {!! Form::submit('发表文章',['class'=>'btn btn-primary form-control']) !!}    {!! Form::close() !!}    @if($errors->any())        <ul class="list-group">            @foreach($errors->all() as $error)                <li class="list-group-item list-group-item-danger">{{$error}}</li>            @endforeach        </ul>    @endif@stop

Web ページのソースコードを確認します

< !DOCTYPE html><html><head>    <title>Laravel</title>    <!-- 新 Bootstrap 核心 CSS 文件 -->    <link rel="stylesheet" href="//cdn.bootcss.com/bootstrap/3.3.5/css/bootstrap.min.css"/></head><body>    <div class="container">    <h1>我是一篇新文章</h1>    <form method="POST" action="http://localhost:8000/articles5" accept-charset="UTF-8"><input name="_method" type="hidden" value="PATCH"/><input name="_token" type="hidden" value="3maFAh6SfF8A7BfQ3CCtUsdCz8wjF9F5AAi99tb1"/>    //可以发现会自动生成一个input,里面是方法PATCH,通过这种hacker的方式来将一些自定义的method来使用,很方便            <!--- Title Field --->    <div class="form-group">        <label for="title">Title:</label>        <input class="form-control" name="title" type="text" id="title"/>    </div>    <!--- Content Field --->    <div class="form-group">        <label for="content">Content:</label>        <textarea class="form-control" name="content" cols="50" rows="10" id="content"></textarea>    </div>    <!---  Field --->    <div class="form-group">        <label for="publish_at">publish_at:</label>        <input class="form-control" name="publish_at" type="date" value="2016-05-24" id="publish_at"/>    </div>    <input class="btn btn-primary form-control" type="submit" value="发表文章"/>    </form>    </div>    </body></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 モデルとフォームをバインドして、編集ページにモデルデータを自動的に書き込むことができるようにするため、編集前のデータが表示されると非常に便利です。

Web ページのソース コードを再度確認します

< !DOCTYPE html><html><head>    <title>Laravel</title>    <!-- 新 Bootstrap 核心 CSS 文件 -->    <link rel="stylesheet" href="//cdn.bootcss.com/bootstrap/3.3.5/css/bootstrap.min.css"/></head><body>    <div class="container">    <h1>我是一篇新文章</h1>    <form method="POST" action="http://localhost:8000/articles5" accept-charset="UTF-8"><input name="_method" type="hidden" value="PATCH"/><input name="_token" type="hidden" value="3maFAh6SfF8A7BfQ3CCtUsdCz8wjF9F5AAi99tb1"/>            <!--- Title Field --->    <div class="form-group">        <label for="title">Title:</label>        <input class="form-control" name="title" type="text" value="我是一篇新文章" id="title"/> //title自动输入了    </div>    <!--- Content Field --->    <div class="form-group">        <label for="content">Content:</label>         <textarea class="form-control" name="content" cols="50" rows="10" id="content">你好</textarea> //内容也是    </div>    <!---  Field --->    <div class="form-group">        <label for="publish_at">publish_at:</label>        <input class="form-control" name="publish_at" type="date" value="2016-05-24" id="publish_at"/>    </div>    <input class="btn btn-primary form-control" type="submit" value="发表文章"/>    </form>    </div>    </body></html>
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。