Home >Backend Development >PHP Tutorial >[Laravel 5 Fundamentals] 27 – Loose Ends and Wrapping Up

[Laravel 5 Fundamentals] 27 – Loose Ends and Wrapping Up

WBOY
WBOYOriginal
2016-06-23 13:02:481158browse

零星的扫尾

前言

本节是该系列的最后一节,这节中我们会把一些零碎的问题都收拾掉。

说明

开发环境:Windows 7

Laravel 版本: 5+

IDE: Phpstorm

这节是本系列的最后一讲,我们扫扫尾,把零碎的两个问题做一个“了断”。

关于日期的问题

关于日期的问题,有两个:

1,当你对一篇文章进行编辑的时候,命名修改了其日期,但是当你保存修改后再打开编辑,发现日期还是原来的日期。

2,日期总是显示当天的日期。

先看第 2 个问题,打开 form.blade.php :

{!! Form::label('publish_at','Publish On:') !!}{!! Form::date('published_at',Carbon\Carbon::now(),['class'=>'form-control']) !!} 

由此可以看出,每片文章的日期都是由 Carbon\Carbon::now() 来决定的,自然都是当天。修改成下面的:

{!! Form::label('publish_at','Publish On:') !!}{!! Form::date('published_at',$article->published_at->format('Y-m-d'),['class'=>'form-control']) !!} 

不难理解吧,从 $article 对象那儿获取到 published_at 这个文章发表字段的值,然后格式化成 Year-month-day 格式。保存再刷新编辑页面,看起来是成功了呢~

等等!当我们创建一篇文章的时候,通过 create 方法,发现会报错。原因也很简单,当我们创建文章的时候,这个文章对象 $article 根本就不存在,因为它自己还在创建中,而我们在对文章进行修改的时候,这个文章对象是已经创建之后的。那怎么办?

打开引用过该表单模板的 create.blade.php 页面,修改如下:

{!! Form::model($article = new \App\Article, ['url'=>'articles']) !!} 

此处我们不再使用 open 方法了,而是用 model 方法绑定一个 article 对象,这里的 article 对象你也看到了,是 new 出来的,新建的,是一个空对象。此时创建文章还是会报错,因为 format 方法不能对 null 对象进行操作。下一步,我们到 Article.php 里面编辑新增一个方法:

public function getPublishedAtAttribute($date){    return new Carbon($date);} 

这个方法的意义就在于当我们要获取 published_at 这个字段的值的时候,如果没有,则 return 一个新的日期,而且是当前的日期。

这下,你可以刷新一个创建文章的页面了,一切,都,正常了。

标签不能点击的问题

目前文章的标签只能看不能点击,比如一点击就会列出所有持有该标签的文章。下面我们来完成这个点。

首先,打开 routes.php ,添加一条路由:

Route::get('tags/{tag}','TagsController@show'); 

意思是,当我们访问 /tags/tag 这个 uri 的时候,将该 tag 传递给 TagsController 的 show 方法。

那么我们通过命令行来创建一个 TagsController.php :

phpartisanmake:controllerTagsController 

打开 TagsController.php 创建 show 方法:

public function show(Tag $tag){    return $tag;} 

记得添加 use App\Tag;下面打开 RouteServiceProvider.php ,找到 boot 方法,添加如下语句:

$router->bind('tags',function($name){    return \App\Tag::where('name',$name)->firstOrFail();}); 

它的意思是将 tags model与路由绑定,这样的好处就是 laravel 内部会处理这些不同层之间的逻辑关系,对你来说是透明的。

至此,你可以去访问一下 /tags/work 或者 /tags/personal 之类的标签查看。

嗯,不错,可以看到了标签的信息。不过我们想要的是显示拥有该标签的文章列表。

修改 TagsController.php 的 show 方法:

public function show(Tag $tag){    $articles = $tag->articles;    return view('articles.index',compact('articles'));} 

首先获取到拥有该标签的文章列表,并存于 $articles 这个变量中,然后将这些文章对象都返回到试图层。保存后,再次访问刚才的标签页面,此时的显示应该是持有该标签的文章的列表,而且是可以访问的文章的列表。

总结

本系列对 laravel 5.2 进行了一些讲解,以写一个博客为实践方向,从 mvc 的各个层,各个细节把 laravel 的应用讲了一下。涉及的东西多,但并不复杂,毕竟还是 fundamental ,不过这些基础的点有很值得深挖的地方。

欢迎各位能够坚持观看和学习本系列,我个人也是第一次接触 php 框架,所有有很多理解都是基于 java 的 web 框架而来的,虽然语言不同,但是架构思想都是差不多的,都是基于 mvc ,不过肯定还有一些问题,欢迎大家能够学习的同时提出并交流~

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn