2015.12.26
0からはじめるPHP#64【TDDで作り直す掲示板#8-View composer-】
掲示板は完成したといいつつ、デザイン面をあれこれ考えつつ、
結局駄作は駄作であると認めてそのまま垂れ流すことを決意しました。
が、その前にもう一つだけ触れておこうと思う話題があります。それが
ビューコンポーサーと呼ばれるものです。
まぁ、正直あんまよくわかってないんですけど、とりあえずビューがレンダーされるたびに結合したい情報があるならおすすめです、ということで。あるいはコントローラーの肥大化を防ぐという目的もありますね。
今回は
全ビューで共通して使う変数を定義してみましょう。
具体的には
タイトルですね。
後からいくらでも変更できるように、共通させられるものは共通させておきたいです。
さて、このビューコンポーサーの実装方法ですが、特にファイルがあるわけではありません。独自バリデーションと同じく、基本的にはどこにでも書けると思います。
こういうのは全部プロバイダーとして書いた方が良さそうなので
app/Providersに
ComposerServiceProvider.phpというのを作成します。
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class ComposerServiceProvider extends ServiceProvider
{
public function boot()
{
// クロージャーベースのコンポーサーを使用する
view()->composer('*', function ($view) {
$view->with("bbs_title",'The 人間観察');
});
}
public function register()
{
}
}
一番簡単な形がコレです。クロージャではなくクラスで指定することも可能です。
ここで全ビューで共通して使う変数を定義してみます。今まで隠してたつもりですが掲示板の名称は
The 人間観察としてます。(笑)
もはや
僕を含めた皆さんが完全に意識の外に追いやっているであろうサイト名称である
「見てはいけない」の名前のちょっとしたダーティーな雰囲気をこちらでも出したほうが統一感出るかなみたいな。単に「掲示板」でもいいんですけどね。ちょっとつまんないので名前付けました。(笑)
ただ、後々に変更する可能性も考えて、こうやって変数で管理しておくと便利ですよね、っていう。
view()->share('default_colors', $default_colors);
ですが、そんなショボい使い方するんならこんな風に
shareするだけで済んだりします。
単に全ビューで共通したいものがある場合はこっちの方がスマートですが、特定のビュー(複数指定も可能です)にのみ反映したい何かがある時は、このようなビューコンポーサーを使ってみると良いかなと思います。まぁ、知識としてはあっていいかなと思います。
ただ、これだけだと動かないので
config/app.phpにプロバイダーを登録する必要があります。
/*
* Application Service Providers...
*/
App\Providers\AppServiceProvider::class,
App\Providers\ComposerServiceProvider::class,//これを追加
App\Providers\AuthServiceProvider::class,
App\Providers\EventServiceProvider::class,
App\Providers\RouteServiceProvider::class,
何も触ってない状態だと大体140行目ぐらいにあるはずなので、探して書き加えます。
ここに並べられているのが、最初に呼び出されるプロバイダー共であるということですね。
実はここに追加することってあんまり他のドキュメントとかで触れられてないのでハマるポイントかなーと思ってます。実際僕はハマりました。←
>>
ということで、ある程度掲示板が完成したかなと思うので
思い切って公開しちゃいます。
フォームを常に表示する、というこだわりを捨てなかったため
逆にデザインとして良くない掲示板になってしまったんですが、正直本腰入れてあれこれ考えるほどの情熱もないのでこのまま公開します。
結局TDDのサイクルすら全然回せてなかったんですが、仕様を知るという意味では経験になったんじゃないかなぁとは思います。はい。
とりあえず日本語との相性はあまり良くないということです。
掲示板は基本チェックしないんで記事の投稿を見逃すことがかなり多いんで、メール通知機能とかつけようかと思ったんですが
純粋にめんどくさいのでやめました。(何)
御用のある方はコメントで、がスタンスになりそうですね・・・・・・・・・・・・。