LoginSignup
0
0

More than 5 years have passed since last update.

CakePHP(3.x) 優先するテンプレートディレクトリを条件によって変える

Last updated at Posted at 2018-05-16

特定の条件でのみCakephpのテンプレートディレクトリを変更したいという要望があり、わりと変態じみた実装をしたのでメモ。

cakephp/config/app.php
    'App' => [
         // ~中略~
        'paths' => [
            'plugins' => [ROOT . DS . 'plugins' . DS],
            //GETパラメータhogeがある場合には/home/fuga/Template/からを優先してctpファイルを探す
            'templates' => isset($_GET['hoge'])
                ? [DS . 'home' . DS . 'fuga' . DS . 'Template' . DS, APP . 'Template' . DS]
                : [APP . 'Template' . DS],
            'locales' => [APP . 'Locale' . DS],
        ],
    ],

設定項目templatesにはテンプレートディレクトリの絶対パスを配列で記述する。

このときに先に記述したディレクトリからマッチするctp(テンプレート)ファイルを探してくれる。

'templates' => [
    DS . 'home' . DS . 'fuga' . DS . 'Template' . DS, # /home/fuga/Template/が優先される
    APP . 'Template' . DS
]

なので特定条件の場合にのみ/home/fuga/Template/の中のctpを優先して見たい場合には、三項演算子で設定する配列を切り替える。

'templates' => (条件) ? [条件がtrueの場合の配列] : [条件がfalseの場合の配列]
  • 設定ファイルの配列内で条件分岐をさせる
  • さらに優先ディレクトリからテンプレート有無を判断するという条件分岐が起こる

と、なんだか書いていてモヤっとする気分になる実装でした。

コントローラ内でテンプレートディレクトリを絶対パスで指定する方法はあるのだろうか。

シンボリックリンクを使った方法だとsvn管理に不都合が生じるためにボツとなった。)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0