[Laravel 5] 筆記20 Loose Ends and Wrapping Up

2015-03-18

https://laracasts.com/series/laravel-5-fundamentals/episodes/27

這節把幾個東西補齊
首先先把 筆記08 寫死的日期更新

▼ resources/views/articles/form.blade.php

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

因為 create 頁面沒有 $article 所以要丟一個空的 article 進去
▼ resources/views/articles/create.blade.php


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

    @include('articles.form',['submitButtonText'=>'Add Article'])

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

因為 published_at 是個 Carbon 物件 所以還要在 model Article.php 裡面處理
▼ app/Article.php

    public function getPublishedAtAttribute($date)
    {
        // 解析 Carbon 並格式化成前台要的方式
        return Carbon::parse($date)->format('Y-m-d');
    }

這樣前面 form.blade.php 的 $article->published_at 即可直接獲得格式為 ‘Y-m-d’ 的日期
  

接著要新增一個頁面 顯示 tags 的 articles
▼ app/Http/routes.php

// 增加一行 route
Route::get('tags/{tags}','TagsController@show');

建立 Controller

php artisan make:controller TagsController --plain

設定 筆記14 寫的 Route Model Binding
▼ app/Providers/RouteServiceProvider.php

public function boot(Router $router)
{
	parent::boot($router);

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

顯示 tag 的 articles
▼ app/Http/Controllers/TagsController.php

class TagsController extends Controller {

    public function show(Tag $tag)
    {
    	// 前面有加上 model binding 所以這邊直接就是這個 tag 的 instance
        //並加上 published() 限制時間到的 articles 才出現 這有寫 scope 在 app/Article.php 裡面
    	$articles = $tag->articles()->published()->get();

    	// 這邊跟 articles 共用 view  也可以另外建立 view
    	return view('articles.index', compact('articles'));
    }
}