5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

出力されたHTMLを見ただけで、CakephpのどのViewの内容なのかすぐに分かるようにする

Last updated at Posted at 2016-09-22

デザイン変更でCakephpのViewファイルを修正する際に、該当のHTML箇所がどのViewファイルの内容なのか少し特定しづらいことがあります。
それが一つのViewで完結しているならまだしも多数のElementを使用しているとなおさらですね。
idやclassで検索するのもめんどくさい。。もう検索しなくてもぱっと特定出来るようにしたい。

そこでローカル環境に限ってHTML上にどのViewファイルの内容なのかコメントを出力するHelperメソッドを作成しました。

具体的なHelperメソッドの処理を以下に記載します。

SampleHelper.php
    /**
     * View開始のHTMLコメント
     */
    function viewStartComment()
    {
        return $this->viewComment();
    }

    /**
     * View終了のHTMLコメント
     */
    function viewEndComment()
    {
        return $this->viewComment(true);
    }

    /**
     * ViewのHTMLコメント出力共通処理
     */
    private function viewComment($viewEnd = false)
    {
        if (env("CAKE_ENV") !== "local"])) {
             return "";
        }
        $debugBackTrace = debug_backtrace();
        $viewPath = $debugBackTrace[1]["file"];
        $status = $viewEnd ? "END" : "START";
        return "<!-- {$status} {$viewPath} -->";
    }

やっていることはphpのdebug_backtraceメソッドを使用して、呼び出し元のViewファイルパスをHTMLコメントとして出力します。
※ちなみに$debugBackTrace[1]["file"]としている理由は、$debugBackTrace[0]["file"]だとviewCommentメソッドを呼んだviewStartComment/viewEndCommentメソッドの情報になりHelperのファイルパスが取れてしまうからです。

あとはこれらのHelperメソッドをViewの最初と最後に呼ぶだけ。

index.ctp
<?= $this->Sample->viewStartComment()?>

<div>サンプルだよ</div>

<?= $this->Sample->viewEndComment()?>

すると出力されたHTMLでは・・

<!-- START /var/www/html/sample/app/View/Samples/index.ctp -->

<div>サンプルだよ</div>

<!-- END /var/www/html/sample/app/View/Samples/index.ctp -->

となります。
もしよければ参考にしてください。
またはもっと良い方法があればコメントでの共有お待ちしています :grinning:

5
5
2

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
5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?