

CakePHPでviewファイルがあるかどうか判定する方法はありますか?

viewファイルがある場合とない場合の処理を分けたいと考えています。


CC BY-SA 3.0
2015-02-03T05:33:01.037
5827
2015-08-24T15:32:02.453
7339
question
cakephp
CakePHPでviewファイルがあるかどうか判定する方法


なんでそんな処理になったのかは気になるところですが・・・  
一応以下のコードでviewファイルの絶対パスを出せるのであとは適当にFileユーティリティで確認すればいけると思います。

[code]

    APP. 'View'. DS. $this->viewPath. DS. $this->view
    
[/code]

なお、テーマなどを使っていた場合は検証していません。


CC BY-SA 3.0
2015-02-03T08:55:55.573
5843
2015-02-03T08:55:55.573
4262
5827
answer


`App::path('View')`

上記コードを使えば、どこでもビューのパスを取得できます。(返り値は配列です)  
ファイルがあるかどうかは、そこから必要なビューファイル名をご自分で連結して、`file_exists` するなどで対処できるかと.

参考URL: <http://book.cakephp.org/2.0/ja/core-utility-libraries/app.html#app-
path>

* * *

# 以下、追記

具体的に、CakePHP2.x 系での `App::path('View');` の返り値の例を記載しておきます。

### 前提条件

* * *

  1. _App/Config/core.php_ には以下の一文が追加されています。

App::build( array('View' => array(APP.'ViewSmartPhone/')) );

  2. 絶対パス、URL は環境に合わせて適宜読み替えてください。

* * *

### 表示用コード

_App/Controller/TopsController.php_

[code]

    public function index()
    {
        var_dump(App::path('View'));
    }
    
[/code]

### 表示結果

URL： _ttp://example.com/tops/index_

[code]

    array (size=2)
      0 => string '/var/www/app/ViewSmartPhone/' (length=52)
      1 => string '/var/www/app/View/' (length=42)
    
[/code]

### 実用サンプル

コントローラ名や想定しているビュー名などを繋げて、以下のようにするといいと思います。  
下記のコードは、意図する .ctp ファイルが存在しているかどうか調べたい所に記述すればそのまま実行できるはずです。

[code]

    $views_path = App::path('View');
    foreach( $views_path as $path ) {
        $_viewpath = $path.'Tops'.DS.'index.ctp';
        if( file_exists($_viewpath) ) {
            // ファイルが存在する場合の処理.
        } else {
            // ファイルが存在しない場合の処理.
        }
    }
    
[/code]


CC BY-SA 3.0
2015-02-03T10:27:11.307
5866
2015-02-20T10:44:49.313
2015-02-20T10:44:49.313
7926
7926
5827
answer


App::path('View')  
で解決できますね。


CC BY-SA 3.0
2015-08-24T15:32:02.453
14810
2015-08-24T15:32:02.453
11047
5827
answer