laravel 5テンプレートのテーマ機能を実現する
周知のように、laravelレンダリングテンプレートはView:make()によって実現され、テンプレートファイルパスを明示的に指定する必要がある:
このように多くの行のコードをパッケージ化していくことができます。この時はResonseオブジェクトを使います。Resonse:view()はViewに等しいです。make()はResonseにもう一つの方法があります。macro()方法はマクロを定義するために使用できます。論理をマクロの中に入れることができます。
今日の教程はここまでにしましょう。後で詳しく分析してみます。お好きなように。
function index()
{
return View::make('index.index');
}
このようにすれば、私達は自分でテンプレートのテーマ機能を実現できます。テンプレートのファイルをテーマ名に対応するディレクトリに置くだけでいいです。たとえば、デフォルトのテーマがdefaultなら、このように書きます。
function index()
{
return View::make('default.index.index');
}
カスタムテーマcustom:
function index()
{
return View::make('custom.index.index');
}
設定ファイルから件名を読み込む:
function index()
{
return View::make(Config::get('app.theme','default').'.index.index');
}
このように基本的にテンプレートのテーマ化機能を実現しましたが、まだ問題があります。つまり、customテーマはすべてのdefaultテーマのすべてのテンプレートを実現しなければなりません。そうしないと、いくつかのページテンプレートファイルにエラーがないようになります。
function index()
{
$theme = Config::get('app.theme','default');
$tpl = $theme.'.index.index';
if (!View::exists($tpl)) {
$tpl = 'default.index.index';
}
return View::make($tpl);
}
テンプレートをレンダリングする前に、テンプレートファイルが存在するかどうかを確認し、存在しない場合はdefaultテーマに対応するテンプレートを使用します。このように多くの行のコードをパッケージ化していくことができます。この時はResonseオブジェクトを使います。Resonse:view()はViewに等しいです。make()はResonseにもう一つの方法があります。macro()方法はマクロを定義するために使用できます。論理をマクロの中に入れることができます。
Response::macro('render',function($path,$data=array()){
$theme = Config::get('app.theme','default');
$tpl = $theme.'.'.$path;
if (!View::exists($tpl)) {
$tpl = 'default.' . $path;
}
return Response::view($tpl,$data);
});
使用:
function index()
{
$bindings = array(
'title' => ' '
);
return Response::render('index.index',$bindings);
}
注意する必要があるのは、着信テンプレートの変数がResonse:renderの第二パラメータを通過することです。今日の教程はここまでにしましょう。後で詳しく分析してみます。お好きなように。