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>

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Das offizielle Konto -Webseite aktualisiert Cache, dieses Ding ist einfach und einfach und es ist kompliziert genug, um einen Topf davon zu trinken. Sie haben hart gearbeitet, um den offiziellen Account -Artikel zu aktualisieren, aber der Benutzer hat die alte Version immer noch geöffnet. Schauen wir uns in diesem Artikel die Wendungen und Wendungen und wie man dieses Problem anmutig ansehen. Nach dem Lesen können Sie sich leicht mit verschiedenen Caching -Problemen befassen, sodass Ihre Benutzer immer den frischesten Inhalt erleben können. Sprechen wir zuerst über die Grundlagen. Um es unverblümt auszudrücken, speichert der Browser oder Server einige statische Ressourcen (wie Bilder, CSS, JS) oder Seiteninhalte, um die Zugriffsgeschwindigkeit zu verbessern. Wenn Sie das nächste Mal darauf zugreifen, können Sie ihn direkt aus dem Cache abrufen, ohne ihn erneut herunterzuladen, und es ist natürlich schnell. Aber dieses Ding ist auch ein zweischneidiges Schwert. Die neue Version ist online,

Dieser Artikel zeigt einen effizienten PNG -Grenzzusatz zu Webseiten mithilfe von CSS. Es wird argumentiert, dass CSS im Vergleich zu JavaScript oder Bibliotheken eine überlegene Leistung bietet, um zu beschreiben, wie die Randbreite, Stil und Farbe für subtile oder herausragende Effekte angepasst werden können

In dem Artikel werden unter Verwendung von HTML5 -Formularvalidierungsattributen wie Erforderlich, Muster, Min, MAX und Längengrenzen erörtert, um die Benutzereingabe direkt im Browser zu validieren.

Der Artikel erörtert den HTML & lt; Datalist & gt; Element, das die Formulare verbessert, indem automatische Vorschläge bereitgestellt, die Benutzererfahrung verbessert und Fehler reduziert werden.Character Count: 159

In Artikel werden Best Practices zur Gewährleistung der HTML5-Cross-Browser-Kompatibilität erörtert und sich auf die Erkennung von Merkmalen, die progressive Verbesserung und die Testmethoden konzentriert.

Der Artikel erörtert den HTML & lt; Progress & gt; Element, Absicht, Styling und Unterschiede vom & lt; Meter & gt; Element. Das Hauptaugenmerk liegt auf der Verwendung & lt; Fortschritt & gt; Für Aufgabenabschluss und & lt; Meter & gt; für stati

Der Artikel erörtert das HTML & lt; Meter & gt; Element, verwendet zur Anzeige von Skalar- oder Bruchwerten innerhalb eines Bereichs und seine gemeinsamen Anwendungen in der Webentwicklung. Es differenziert & lt; Meter & gt; von & lt; Fortschritt & gt; und Ex

Dieser Artikel erklärt den HTML5 & lt; Time & gt; Element für semantische Datum/Uhrzeit. Es betont die Wichtigkeit des DateTime-Attributs für die Maschinenlesbarkeit (ISO 8601-Format) neben menschenlesbarem Text, das Zubehör steigert
