Route::resource和Form-Model-Binding_html/css_WEB-ITnose
关于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.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') <h1 id="article-title">{{$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出来的是正确的title
编辑PATCH method
确认edit模板和edit方法是正常之后,再次修改edit模板
resources/views/articles/edit.blade.php@extends('layout.app')@section('content') <h1 id="article-title">{{$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
检查网页源代码
< !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 id="我是一篇新文章">我是一篇新文章</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是将model和from进行绑定,这样可以实现自动将model的数据写入form表单,对于编辑页面,要出现编辑之前的数据的话,很有用。
再次检查网页源码
< !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 id="我是一篇新文章">我是一篇新文章</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>

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Cache kemas kini laman web akaun rasmi, perkara ini mudah dan mudah, dan ia cukup rumit untuk minum periuknya. Anda bekerja keras untuk mengemas kini artikel akaun rasmi, tetapi pengguna masih membuka versi lama. Dalam artikel ini, mari kita lihat kelainan dan bertukar di belakang ini dan bagaimana menyelesaikan masalah ini dengan anggun. Selepas membacanya, anda boleh dengan mudah menangani pelbagai masalah caching, yang membolehkan pengguna anda sentiasa mengalami kandungan segar. Mari kita bincangkan asas -asas terlebih dahulu. Untuk meletakkannya secara terang -terangan, untuk meningkatkan kelajuan akses, penyemak imbas atau pelayan menyimpan beberapa sumber statik (seperti gambar, CSS, JS) atau kandungan halaman. Kali seterusnya anda mengaksesnya, anda boleh mengambilnya secara langsung dari cache tanpa perlu memuat turunnya lagi, dan ia secara semula jadi cepat. Tetapi perkara ini juga pedang bermata dua. Versi baru dalam talian,

Artikel ini membincangkan menggunakan atribut pengesahan bentuk HTML5 seperti had, corak, min, max, dan panjang untuk mengesahkan input pengguna secara langsung dalam penyemak imbas.

Artikel membincangkan amalan terbaik untuk memastikan keserasian silang pelayar HTML5, memberi tumpuan kepada pengesanan ciri, peningkatan progresif, dan kaedah ujian.

Artikel ini menunjukkan penambahan sempadan PNG yang cekap ke halaman web menggunakan CSS. Ia berpendapat bahawa CSS menawarkan prestasi unggul berbanding dengan JavaScript atau perpustakaan, memperincikan cara menyesuaikan lebar sempadan, gaya, dan warna untuk kesan halus atau menonjol

Artikel ini membincangkan html & lt; datalist & gt; elemen, yang meningkatkan bentuk dengan menyediakan cadangan autokomplete, meningkatkan pengalaman pengguna dan mengurangkan kesilapan. Kira -kira: 159

Artikel ini membincangkan html & lt; kemajuan & gt; elemen, tujuan, gaya, dan perbezaan dari & lt; meter & gt; elemen. Tumpuan utama adalah menggunakan & lt; kemajuan & gt; untuk menyelesaikan tugas dan & lt; meter & gt; untuk stati

Artikel ini menerangkan html5 & lt; time & gt; elemen untuk perwakilan tarikh/masa semantik. Ia menekankan pentingnya atribut DateTime untuk pembacaan mesin (format ISO 8601) bersama teks yang boleh dibaca manusia, meningkatkan aksesibilit

Artikel ini membincangkan html & lt; meter & gt; elemen, digunakan untuk memaparkan nilai skalar atau pecahan dalam julat, dan aplikasi umum dalam pembangunan web. Ia membezakan & lt; meter & gt; dari & lt; kemajuan & gt; dan Ex
