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

來源:互聯網
上載者:User

零星的掃尾

前言

本節是該系列的最後一節,這節中我們會把一些零碎的問題都收拾掉。

說明

開發環境: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 出來的,建立的,是一個Null 物件。此時建立文章還是會報錯,因為 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 ,不過肯定還有一些問題,歡迎大家能夠學習的同時提出並交流~

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.