当前位置:Gxlcms > PHP教程 > [Laravel5Fundamentals]27–LooseEndsandWrappingUp

[Laravel5Fundamentals]27–LooseEndsandWrappingUp

时间:2021-07-01 10:21:17 帮助过:16人阅读

零星的扫尾

前言

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

说明

开发环境: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 ,不过肯定还有一些问题,欢迎大家能够学习的同时提出并交流~

人气教程排行