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入门速成(2)
Oct 09 PHP
PHP数据缓存技术
Feb 14 PHP
PHP 写文本日志实现代码
May 18 PHP
PHP执行zip与rar解压缩方法实现代码
Dec 05 PHP
PHP数据类型的总结分析
Jun 13 PHP
解决PhpMyAdmin中导入2M以上大文件限制的方法分享
Jun 06 PHP
PHP数字和字符串ID互转函数(类似优酷ID)
Jun 30 PHP
PHP开发框架kohana中处理ajax请求的例子
Jul 14 PHP
详解php比较操作符的安全问题
Dec 03 PHP
mysql desc(DESCRIBE)命令实例讲解
Sep 24 PHP
PHP构造二叉树算法示例
Jun 21 PHP
PHP实现数组转JSon和JSon转数组的方法示例
Jun 14 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
一些常用的php简单命令代码集锦
2007/09/24 PHP
PHP漏洞全解(详细介绍)
2012/11/13 PHP
PHP Global定义全局变量使用说明
2013/08/15 PHP
使用PHP备份MySQL和网站发送到邮箱实例代码
2013/11/28 PHP
php编写批量生成不重复的卡号密码代码
2015/05/14 PHP
解密效果
2006/06/23 Javascript
JavaScript中“+”的陷阱深刻理解
2012/12/04 Javascript
JS实现至少包含字母、大小写数字、字符的密码等级的两种方法
2015/02/03 Javascript
JS实现表格数据各种搜索功能的方法
2015/03/03 Javascript
jQuery学习笔记——jqGrid的使用记录(实现分页、搜索功能)
2016/11/09 Javascript
JS 组件系列之Bootstrap Table的冻结列功能彻底解决高度问题
2017/06/30 Javascript
Vue-Router进阶之滚动行为详解
2017/09/13 Javascript
JavaScript生成简单等差数列
2017/11/28 Javascript
vue组件实现可搜索下拉框扩展
2020/10/23 Javascript
webpack多入口多出口的实现方法
2018/08/17 Javascript
vue项目引入Iconfont图标库的教程图解
2018/10/24 Javascript
详解50行代码,Node爬虫练手项目
2019/04/22 Javascript
微信小程序自定义modal弹窗组件的方法详解
2020/12/20 Javascript
python实现dnspod自动更新dns解析的方法
2014/02/14 Python
使用python批量读取word文档并整理关键信息到excel表格的实例
2018/11/07 Python
Python数据分析模块pandas用法详解
2019/09/04 Python
django框架使用views.py的函数对表进行增删改查内容操作详解【models.py中表的创建、views.py中函数的使用,基于对象的跨表查询】
2019/12/12 Python
利用CSS的Sass预处理器(框架)来制作居中效果
2016/03/10 HTML / CSS
HTML5 本地存储实现购物车功能
2017/09/07 HTML / CSS
如果有两个类A,B,怎么样才能使A在发生一个事件的时候通知B
2016/03/12 面试题
师范应届毕业生自荐信
2013/11/18 职场文书
迎接领导欢迎词
2014/01/11 职场文书
淘宝店铺营销方案
2014/02/13 职场文书
大学军训决心书
2015/02/05 职场文书
伏羲庙导游词
2015/02/09 职场文书
专家推荐信范文
2015/03/26 职场文书
培养联系人考察意见
2015/06/01 职场文书
提档介绍信范文
2015/10/22 职场文书
2016年情人节问候语
2015/11/11 职场文书
分析JVM源码之Thread.interrupt系统级别线程打断
2021/06/29 Java/Android
Python中可变和不可变对象的深入讲解
2021/08/02 Python