Laravel 5框架学习之子视图和表单复用


Posted in PHP onApril 09, 2015

我们需要处理编辑文章的问题。当然我们可以手工添加新的路由,就像这样:

Route::get('/articles/{id}/edit', 'ArticleController@edit');

让我们在命令行下使用 artisan 的 route:list 来查看我们当前的路由:

php artisan route:list

在符合 RESTful 的情况下,可能直接使用 laravel 的 resource 路由是一种好的选择,然我们将所有的路由都去掉,只添加唯一的一个:

Route::resource('articles', 'ArticlesController');

再次使用 php artisan route:list 查看路由,哇,一堆的符合我们期望的路由产生了。每一项都仔细查看一下。

现在在控制器中添加方法:

public function edit($id) {
    $article = Article::findOrFail($id);

    return view('articles.edit', compact('article'));
  }

现在创建视图

@extends('layout')

@section('content')
  <h1>Edit: {!! $article->title !!} </h1>

  <hr/>

  ...

好吧,我承认这些代码都是从 create.blade.php 中拷贝出来的,修改了一下,问题是我们需要重复吗?后面我们会处理这个问题,现在来看一下表单的提交问题。在路由中 php artisan route:list ,再看一遍,修改使用了 PATCH 方法,我们来修改视图:

{!! Form::open(['method' => 'PATCH', 'url' => 'articles/' . $article->id]) !!}

在浏览器中访问 /articles/1/edit ,查看一下源代码,发现laravel自动生成了 _method=PATCH 的隐藏字段。

一问题是,我们编辑文章,但是文章的信息并没有显示出来,我们修改一下视图:

 {!! Form::model($article, ['method' => 'PATCH', 'url' => 'articles/' . $article->id]) !!}

OK,everything's ok,除了 published_on 字段仍然设置为当前日期,后面我们来处理。

现在在控制器中添加方法:

public function update($id, \Illuminate\Http\Request $request) {
    $article = Article::findOrFail($id);
    $article->update($request->all());

    return redirect('articles');
  }

我们在修改的过程中也需要验证,让我们复用我们的 Request 类,将 CreateArticleRequest 更名为更通用的 ArticleRequest,别忘了修改 store 方法中的参数。

public function update($id, Requests\ArticleRequest $request) {
    $article = Article::findOrFail($id);
    $article->update($request->all());

    return redirect('articles');
  }

现在剩下的问题是我们的新建和编辑使用了大部分相同的代码,比如显示错误,但他们存在两份,我们来修改这个问题。

我们直接在 views/articles 下面新建文件 list.blade.php,并把错误处理代码从 create.blade.php 中拷贝出来:

@if ($errors->any())
  <ul class="alert alert-danger">
    @foreach($errors->all() as $error)
      <li>{{ $error }}</li>
    @endforeach
  </ul>
@endif

在 create.blade.php 只需用下面语句替换错误处理代码即可:

@include('articles.list')

让我们再来处理表单代码,表单代码中除了 form 不大一样和提交按钮有区别,其他都差不多。我们创建一个视图 articles/form_partial.blade.php,将代码拷贝出来

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

<div class="form-group">
  {!! Form::label('body', 'Body:') !!}
  {!! Form::textarea('body', null, ['class' => 'form-control']) !!}
</div>

<div class="form-group">
  {!! Form::label('published_at', 'Publish On:') !!}
  {!! Form::input('date', 'published_at', date('Y-m-d'), ['class' => 'form-control']) !!}
</div>

<div class="form-group">
  {{--这里要设置变量,依据是编辑还是修改来改变,当然也可以不放置在partial中--}}
  {!! Form::submit($submitButtonText, ['class' => 'btn btn-primary form-control']) !!}
</div>

修改 create.blade.php

@extends('layout')

@section('content')
  <h1>Write a New Article</h1>

  <hr/>

  @include('articles.list')

  {{--使用我们添加的 illuminate\html 开源库--}}
  {!! Form::open(['url' => 'articles']) !!}
    @include('articles.form_partial', ['submitButtonText' => 'Add Article'])
  {!! Form::close() !!}

@stop

修改 edit.blade.php

@extends('layout')

@section('content')
  <h1>Edit: {!! $article->title !!} </h1>

  <hr/>

  @include('articles.list')
  {{--使用我们添加的 illuminate\html 开源库--}}
  {!! Form::model($article, ['method' => 'PATCH', 'url' => 'articles/' . $article->id]) !!}
  @include('articles.form_partial', ['submitButtonText' => 'Update Article'])

  {!! Form::close() !!}

@stop

以上就是本文给大家介绍的全部内容了,希望能够对大家熟练掌握Laravel5框架有所帮助。

PHP 相关文章推荐
php 验证码制作(网树注释思想)
Jul 20 PHP
关于php fread()使用技巧
Jan 22 PHP
PHP判断远程url是否有效的几种方法小结
Oct 08 PHP
一个漂亮的php验证码类(分享)
Aug 06 PHP
php批量添加数据与批量更新数据的实现方法
Dec 16 PHP
PHP从FLV文件获取视频预览图的方法
Mar 12 PHP
joomla组件开发入门教程
May 04 PHP
php curl中gzip的压缩性能测试实例分析
Nov 08 PHP
PHP+Ajax简单get验证操作示例
Mar 02 PHP
laravel异步监控定时调度器实例详解
Jun 21 PHP
PHP使用 Pear 进行安装和卸载包的方法详解
Jul 08 PHP
PHP defined()函数的使用图文详解
Jul 20 PHP
php判断文件夹是否存在不存在则创建
Apr 09 #PHP
从wamp到xampp的升级之路
Apr 08 #PHP
Laravel 5框架学习之表单验证
Apr 08 #PHP
Laravel 5框架学习之日期,Mutator 和 Scope
Apr 08 #PHP
Laravel 5框架学习之表单
Apr 08 #PHP
Laravel 5框架学习之模型、控制器、视图基础流程
Apr 08 #PHP
Laravel 5框架学习之Eloquent (laravel 的ORM)
Apr 08 #PHP
You might like
phpmyadmin安装时提示:Warning: require_once(./libraries/common.inc.php)错误解决办法
2011/08/18 PHP
php数组函数序列之array_keys() - 获取数组键名
2011/10/30 PHP
smarty模板中拼接字符串的方法
2014/02/14 PHP
php文件夹的创建与删除方法
2015/01/24 PHP
PHP速成大法
2015/01/30 PHP
PHP生成压缩文件实例
2015/02/07 PHP
WordPress中用于获取文章作者与分类信息的方法整理
2015/12/17 PHP
ImageZoom 图片放大镜效果(多功能扩展篇)
2010/04/14 Javascript
jquery.Jwin.js 基于jquery的弹出层插件代码
2012/05/23 Javascript
通过JS来判断页面控件是否获取焦点
2014/01/03 Javascript
Jquery EasyUI实现treegrid上显示checkbox并取选定值的方法
2016/04/29 Javascript
需要牢记的JavaScript基础知识
2016/09/25 Javascript
浅析上传头像示例及其注意事项
2016/12/14 Javascript
常见的浏览器Hack技巧整理
2017/06/29 Javascript
AngularJS中table表格基本操作示例
2017/10/10 Javascript
vscode配置vue下的es6规范自动格式化详解
2019/03/20 Javascript
在Vue中实现随hash改变响应菜单高亮
2020/03/09 Javascript
jQuery实现鼠标拖拽登录框移动效果
2020/09/13 jQuery
Python读取网页内容的方法
2015/07/30 Python
python统计字母、空格、数字等字符个数的实例
2018/06/29 Python
selenium设置proxy、headers的方法(phantomjs、Chrome、Firefox)
2018/11/29 Python
读取nii或nii.gz文件中的信息即输出图像操作
2020/07/01 Python
解决PyCharm IDE环境下,执行unittest不生成测试报告的问题
2020/09/03 Python
python 爬虫如何正确的使用cookie
2020/10/27 Python
HTML5等待加载动画效果
2017/07/27 HTML / CSS
Belvilla德国:在线预订度假屋
2018/04/10 全球购物
SportsDirect.com马来西亚:英国第一体育零售商
2018/11/21 全球购物
请解释流与文件有什么不同
2016/07/29 面试题
连锁经营管理专业大学生求职信
2013/10/30 职场文书
《散步》教学反思
2014/03/02 职场文书
经典而简洁的婚礼主持词
2014/03/13 职场文书
父母寄语大全
2014/04/12 职场文书
学生喝酒检讨书500字
2014/11/02 职场文书
幼儿园教师自荐书
2015/03/06 职场文书
Python代码,能玩30多款童年游戏!这些有几个是你玩过的
2021/04/27 Python
漫画「狩龙人拉格纳」公开TV动画预告图
2022/03/22 日漫