🔎
Laravelで画面に表示されたviewのファイル名を特定する
※この記事は2022年1月に個人ブログで投稿した「キャッシュ前のviewファイル名を確認する」をベースに書き直しました。個人ブログは現在閉鎖しています。
はじめに
皆さんはあるコンポーネントを修正したい場合、どうやってそのコンポーネントのファイルを特定してますか?
クラス名やキーワードから、プロジェクト内を検索してシラミ潰すのも効果的ですが、検索に引っかからないと特定に時間がかかって面倒です。Chromeの開発ツールでファイル名を確認しようにも、キャッシュされたファイル名が出てきてしまい、もとのファイルがわからないことがありました。そんなときに使える、キャッシュされる前のすべてのviewファイル名をdumpする方法をご紹介します。
対象読者
- Laravel を使っている、画面のあるプロジェクトに参加している方。
要約
/vendor/laravel/framework/src/Illuminate/View/Engines/CompilerEngine.php
のget($path, $data)
の $path
をdumpすると確認できる。
詳細
まずは、 CompilerEngine.php を開きます。以下のコマンドで見つかります。
$ find . | grep Illuminate/View/Engines/CompilerEngine.php
// ↓ 結果、以下に存在することがわかった
// /lab/vendor/laravel/framework/src/Illuminate/View/Engines/CompilerEngine.php
ファイルが見つかったら、 get($path, $data)
の $path
を dmup します。
/**
* Get the evaluated contents of the view.
*
* @param string $path
* @param array $data
* @return string
*/
public function get($path, array $data = [])
{
$this->lastCompiled[] = $path;
// If this given view has expired, which means it has simply been edited since
// it was last compiled, we will re-compile the views so we can evaluate a
// fresh copy of the view. We'll pass the compiler the path of the view.
if ($this->compiler->isExpired($path)) {
$this->compiler->compile($path);
}
// Once we have the path to the compiled file, we will evaluate the paths with
// typical PHP just like any other templates. We also keep a stack of views
// which have been rendered for right exception messages to be generated.
$results = $this->evaluatePath($this->compiler->getCompiledPath($path), $data);
array_pop($this->lastCompiled);
+ dump($path);
return $results;
}
以下のように、画面上部にviewファイルのpathが表示されます!
どうなってるの?
このget()
関数は、 view がキャッシュされる前に必ず通るようになっています。
なので、$path
を見ればそのファイル名がdumpできるというわけです。
ハック的な方法なので、別の良いやり方あったら教えてください。
Discussion