- PVSM.RU - https://www.pvsm.ru -
Написать свою Debug-панель в Yii очень просто. Поэтому рассмотрим чуть практичную (с вызовом api PHPStorm) панель просмотра вьюшек.
Есть подробно разжеванная документация, c примером вывода списка вьюшек. Давайте ее приведем в более практичный вид.
1. Уберем дубликаты.
2. Разделим въюшки для layouts, и основные.
3. Сделаем ссылку на Idea API.
Как известно когда мы кликаем на ссылку отображаемую функцией getSummary в «мини панели», отображается панель с контентом переданным функцией getDetail. Для краткости, ее код и приведу:
public function getDetail()
{
$rootDir = Yii::getAlias('@app');
$rootDir = dirname($rootDir); //remove last dir
$viewsNormal = [];
$viewsLayout = [];
//$this->data = array_unique($this->data); //if delete duplicates
foreach ($this->data as $view) {
$viewFile = str_replace($rootDir.DIRECTORY_SEPARATOR, '', $view);
if (strpos($viewFile, 'layouts') !== false) {
$viewsLayout[$viewFile]++;
} else {
$viewsNormal[$viewFile]++;
}
}
//Display
$js = <<<JS
function _openIDE(elem){
var xmlhttp = new XMLHttpRequest();
xmlhttp.open("GET", "http://localhost:63342/api/file?file=" + elem.innerHTML, true);
xmlhttp.send();
}
JS;
$content = "<script>$js</script>";
$content .= 'Views:<ol>';
foreach ($viewsNormal as $v => $count) {
$content .= '<li>' . $this->link2IDE($v) . ($count > 1 ? " ($count)" : '') . '</li>';
}
$content .= '</ol>';
$content .= '<hr>on layout:<ol>';
foreach ($viewsLayout as $v => $count) {
$content .= '<li>' . $this->link2IDE($v) . ($count > 1 ? " ($count)" : '') . '</li>';
}
$content .= '</ol>';
return $content;
}
Если сделать «стандартную ссылку»(вариант 1), открывается новое пустое окно в браузере. Поэтому сделана отдельная JS функция.
private function link2IDE($linkFile) {
//Variant 1
//$port = '63342';
//return Html::a($linkFile, "http://localhost:$port/api/file?file=$linkFile&line=1", ['target' => '_top']);
//Variant 2
return "<a href='#' onclick='_openIDE(this);return false;'>$linkFile</a>";
}
Если вы не параноик постоянно выскакивающий запрос на разрешение напрягает, нужно включить галочку.
В итоге вот такая форма получилась, при клике на ссылку открывается первая строка въюшки в IDE(intellij, у меня IDEA, в PHPStorm тоже должно работать):
Предваряя возможные вопросы:
return Yii::$app->view->render('@app/components/panels/views/auc/detail', [
'data' => $this->data,
]);
PS: Сами мы не местные, поэтому прошу «профффтить и поннннять», написать в личку об ошибках.
Автор: TOLK
Источник [3]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/php-2/220638
Ссылки в тексте:
[1] такая штука.: https://github.com/yiisoft/yii2-debug/blob/master/docs/guide/installation.md#extra-configuration-for-opening-in-ides
[2] SamDark: https://habrahabr.ru/users/samdark/
[3] Источник: https://habrahabr.ru/post/317562/?utm_source=habrahabr&utm_medium=rss&utm_campaign=sandbox
Нажмите здесь для печати.