Yii, автокомплит для Yii::app
4 августа 2011
Yii неплохо дополняется в различных IDE, но для этого его нужно немного настроить. После первоначальной настройки можно сделать ещё одну штуку, полезную, когда вы работаете исключительно с веб-приложием.
- В
index.php
подключаемYiiBase.php
вместоyii.php
, дописываем свой класс с аннотацией для IDE:
require(dirname(__FILE__) . '/../framework/YiiBase.php'); class Yii extends YiiBase { /** * @static * @return CWebApplication */ public static function app() { return parent::app(); } } $config=dirname(__FILE__).'/../protected/config/main.php'; defined('YII_TRACE_LEVEL') or define('YII_TRACE_LEVEL',3); $app = Yii::createWebApplication($config)->run();
- Исключаем
yii.php
из индекса IDE. В PhpStorm это можно сделать несколькими способами, в NetBeans поступаем как сyiilite.php
.
После всех манипуляций получим дополнение, например, для Yii::app()->user->
.
Комментарии RSS по email OK
Как вариант - да, но хотелось бы нативной поддержки
А как тогда быть с
CConsoleApplication
?С ними не имел дело, тут понятия не имею. Про нативную это я про поддержку средствами самого IDE.
IDE сейчас верно работают т.к. в коде Yii явно прописан класс
CApplication
, а неCWebApplication
.Это то понятно, но, для потомка CConsoleCommand можно было бы подсказать по CConsoleApplication, по аналогии и с CController.
Плохо что в IDE нет нечто вроде редактора символьной базы по коду. Так бы каждый смог настроить все под себя.
А почему нельзя поменять комментарий в фрэймворке?
mrix, в фреймворке два типа приложений:
CWebApplication
иCConsoleApplication
. Если явно прописатьCWebApplication
, для консольного будут дополняться вещи, которых в нём нет.Я понимаю. Я имел в виду, что я в фрэймворке меняю сам. Это комментарий, от которого зависит только удобство.
mrix, и так каждый раз при выходе новой версии?
2Sam, может ввести Console::app(), Web::app() ?
Да. С консольными приложениями работаю редко. Только команды по cron: рассылка писем, чистка базы, сбор статистики и т.п. Написал и забыл.
Переименовать CApplication в CWebApplication требует немного времени. Новые версии выходят раз в 3 месяца.
А зачем вообще файл yiilite делать с расширением .php ? Интерпретатору глубоко пофиг, какой файл инклюдить. Я имею в виду, что можно переименовать файл в yiilite.phpcache например, тогда иде не будут считать этот файл типа php. Что-то подобное есть в Symfony 2.
Да, вариант, конечно. Хотя, в Yii2, скорее всего, lite вообще не будет.
На Yii2 посмотреть хочется. Мне в целом нравится минимализм фреймворка, нет нагромождения абстракций - но к сожалению много очень магии, из-за которой люди, не слишком то знакомые с фреймворком, начинают делать велосипеды =(
mitallast, если есть 20 постов на официальном форуме, можно поучаствовать в обсуждении.
Sam
Ссылка битая.
Она не битая. Просто у вас, скорее всего, нет 20-и постов.
Почему после такой настройки CWebLogRoute выводит только логи БД?
Эта настройка к логам отношения не имеет.
Поэтому я и задался вопросом, почему так происходит. Если описание класса Yii положить в корень фреймворка и заинклудить из index.php то логи работают нормально.
спасибо, классная идея - писать класс yii в index.php
только надо исключить из ide нативный класс
Сделал эту штуку, спасибо за совет. В строке "Yii::app()->user->id" слово "user" перестало подсвечивать жёлтым, отлично. Но теперь жёлтым подсвечивает "id". Это можно как-то исправить, или геттеры настроить нельзя?
(Здесь user имеет тип WebUser, наследуемый от CWebUser.)
Можно, если в вашем WebUser прописать
@property integer $id id of the user
в его phpdoc.Так ведь это свойство явно не определено, оно берётся методом getId().
(Кроме того, его явное добавление в WebUser не помогло, потому что PhpStorm считает, что user имеет тип CWebUser.)
Ну вот как раз при помощи
@property
мы подсказываем IDE, что оно есть. Вообще в 1.1.9 будут везде расставлены эти мета-теги, так что дополнять будет в разы лучше изначально.Супер! Пользуюсь PHPStorm. Сегодня осознал что мне нужно что-то типа автокомплита, т.к. для меня это своего рода хелп. Настроил ИДЕ по http://yiiframework.ru/doc/cookbook/ru/ide + по методу данного посту.
почему-то у меня с require(dirname(FILE) . '/../framework/YiiBase.php'); возникает на всех страницах проекта ошибка: Cannot redeclare class cbaseactiverelation in Y:\home\framework\YiiBase.php on line 399
..если кто с этим сталкивался - просьба откликнуться в чем там проблема. (за 30 минут не разобрался). Yii ver.:1.1.10
Кстати, в итоге сделал в index.php так : if($_SERVER['HTTP_HOST']=='IDE'){ $yii=(dirname(FILE).'/../framework/YiiBase.php'); class Yii extends YiiBase { /** * @static * @return CWebApplication */ public static function app() { return parent::app(); } } require_once($yii); }
($_SERVER['HTTP_HOST']=='IDE' - умышленно не актуальный хост. Но в phpstrom автокомплит работает!!!
Как "плюс" в этом я вижу что не надо ничего править при закачке на боевой сервер.
..сори проглядел кнопку "код"
Использую Yii 1.1.12-dev. IDE PhpStorm.
Sam, не подскажешь, есть ли возможность, при расширении компонента, прописав в нем phpDoc, сделать автокомплит новых методов.
К примеру я расширяю класс CWebUser
Можно ли как-то сделать, чтобы IDE при автокомплите показывала и мой метод getLoginUrl?
Можно. В своём классе
Yii
прописать@property
и свой application, в нём уже пользователя.Спасибо большое, Sam.
Большое спасибо, недавно приобрел phpStorm, как раз в Yii не хватало нормлаьного автокомплита.
Все отлично, но зачем $app?
Александр, незачем, в общем-то.
хммм...
делаю в storm вот так: $transaction = Yii::app()->db->beginTransaction();
чуть ниже $transaction->(Ctrl+Space) и тишина ...
быстренько открыл тот же файл в netbeans и все нормально, даже без yii плагинов
после вопроса все заработало)) походу надо было перезагрузить и все таки, я правильно понял Storm индексирует файлы только через phpdoc?
Mazaj, нет, не только через phpdoc.
Вот не знаю, хоть убейте, но phpDesigner гораздо удобнее в плане автокомплита и вывода подсказок по методам, и плагинов никаких не нужно ставить.
Спасибо. Все четко работает!
Мне для Yii больше нравится Codelobster
Тут есть специальный плагин для автокомплита и помощи.
Угу, автодополнение получил... но само приложение работать перестало. Это так и должно быть? Просто белый экран...
Для версии Yii 1.1.13 для автокомплита в PhpStorm можно просто в файл yii.php внутрь класса Yii закинуть вот такое
2meliorator Спасибо:)
Круто, очень полезно. Также важно взять на заметку то, что если делать
require($pathToYiiBase);
до других define-ов в индексном файле, то они не будут учитываться в define-ах в файле YiiBase.php.Вставлю свои пять копеек, т.к. считаю, что в индексе ничего лишнего не должно быть.
Например:
Отличное решение, но автокомплит для Yii::app()-> предлагает только дефолтные компоненты. Можно ли сделать так чтобы он предлагал и свои? Компоненты унаследованы от CApplicationComponent и прописаны в конфиге в секции components. Пользуюсь штормом 9 версии
Максим, нужно phpdoc property добавить с типом и названием.
@zazu а можете пример привести? Что-то никак не подставляет :/
Максим, почитайте о phpdoc'ах. Пример:
@property MyCustomComponent $myCmp
И вы получаете подсказку myCmp для свойстваYii::app()
@zazu, благодарю :)