Code completion в phpStorm

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
Great
Сообщения: 70
Зарегистрирован: 2011.07.27, 11:31

Code completion в phpStorm

Сообщение Great »

Всем привет!

Возник вопрос по поводу нормальной поддержки Yii в IDE. Я использую phpStorm. Пробовал NetBeans, долго сидел на Eclipse, но разработчики Эклипса методично убивают свой продукт, с каждым обновлением не только не решая застарелые проблемы, но и добавляя массу новых. После очередного такого обновления плюнул и приобрел phpStorm, о чем очень доволен.

Так вот, с подсветкой синтаксиса для Yii совсем беда. И как ни странно - ничего в сети об этом не нашел.
Например, маны говорят, что можно писать

Код: Выделить всё

Yii::app()->params['paramName'];
 
Можно.. Но IDE не предлагает мне ввести params и не видит этого свойства, при этом лишая многих вкусностей.
Зато вот так вполне себе работает:

Код: Выделить всё

Yii::app()->getParams()->itemAt( 'paramName' );
 
Это я обойти смог, а вот когда дошел до ActiveRecord - совсем беда оказалась..

Например, пишу

Код: Выделить всё

$news = new News();

$selectCriteria = new CDbCriteria();
$selectCriteria->condition = 'subject_id=:subjectID';
$selectCriteria->params = array( ':subjectID' => '21' );
$selectCriteria->select = array( 'article_title', 'new_date' );
$selectCriteria->limit = 1;

$newsArticles = $news->model()->find( $selectCriteria );
 
Теперь в $news я могу обратиться с подсветкой к $news->article_title, а вот в $newsArticles - нет. Точнее обратиться могу - это будет работать, а вот IDE не подсвечивает.

Ну и основное разочарование - это шаблоны. Там вообще никакого completion нет. Нафига тогда это все, если я не могу в шаблоне просто писать $model->article_title через completion? Мне надо всегда помнить имена всех полей таблиц, соответственно вероятность опечаток, ошибок и время работы возрастают.

Я что-то делаю не так? Может просто не умею пользоваться шаблонами? В Yii я пока только осваиваюсь, еще много чего не знаю.. Или это просто плата за скорость работы самого фреймворка? У меня народ разрабатывает на Symfony+Doctrine. Это монструозный фреймворк, у которого есть всё. Но насколько он монструозный, настолько же он и тормознутый, поэтому ищу способ с него уйти. Приглянулся Yii, но когда начал на нем писать - стали выползать такие вот неприятности. Без completion процесс разработки немного теряет эффективность. Я прекрасно понимаю, что важен не процесс, а результат и думаю готов даже жертвовать этим удобством, лишь бы Yii действительно оказалась такой быстрой как пишут, но все же может это как-то решается?
Аватара пользователя
Stamm
Сообщения: 407
Зарегистрирован: 2010.03.14, 18:59
Откуда: Россия, Москва
Контактная информация:

Re: Code completion в phpStorm

Сообщение Stamm »

В шаблонах можно схитрить, ставить в начало phpdoc для нужных переменных:

Код: Выделить всё

/** @var $model ClassName*/
А так голосуем за поддержку фреймворка
Кстати, ещё делают поддержку в нетбинсе: скрин. Вчера качал dev-сборку, ещё не было этой поддержки - ничего не смогу сказать.
Great
Сообщения: 70
Зарегистрирован: 2011.07.27, 11:31

Re: Code completion в phpStorm

Сообщение Great »

Stamm, спасибо! Я не знал об этом трюке.
В принципе, это выход.. Пока не добавят полноценную поддержку в IDE, либо вопрос не решится каким-то другим способом.
Аватара пользователя
RusAlex
Сообщения: 324
Зарегистрирован: 2010.08.29, 15:30

Re: Code completion в phpStorm

Сообщение RusAlex »

Great, да PHPDoc решает вообще в плане автодополнения. Если иде корректно его читает, то с автодополнением можно все что угодно делать с PHPDoc.
Один вопрос: что не понравилось в эклипс ? у меня вим+эклипс проблем никаких не наблюдаю.
Great
Сообщения: 70
Зарегистрирован: 2011.07.27, 11:31

Re: Code completion в phpStorm

Сообщение Great »

В Eclipse не понравилось:
1. Неадекватный поиск. Я до сих пор не понимаю почему он ищет только в одном направлении и чтобы мне направление поиска (вверх/вниз) изменить мне нужно вручную это переключать. Для кого-то мелочь, но меня доставало.
2. У меня иногда зависал сам модуль работы с PHP. Приходилось пару минут просто сидеть и ждать его. Иногда не отвисал вообще.
3. У меня иногда терял способность к подсказкам кода. Внезапно терялось, потом также внезапно появлялось.
4. Нет автообновления файлов в проекте. Если я добавлю файлы - надо принудительно обновлять весь проект. Если открою измененный файл - надо обновить весь проект или перечитать этот файл (это в одной из последних версий они немного поправили).
5. Были какие-то проблемы с кодировкой при работе с русским. Не помню уже что.

Не могу сказать, что Eclipse плох, в нем вполне можно работать, я в нем работал долго, там удобно работать в нескольких проектах одновременно. Но phpStorm дал мне отличный поиск, чудесный code completion, высокую скорость и стабильность работы и полное отсутствие глюков. А что еще нужно? За это и 20$ не жалко.
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Code completion в phpStorm

Сообщение samdark »

Great
Спасибо за примеры, в следующей версии (или в коде из SVN) часть с params будет работать.
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Code completion в phpStorm

Сообщение samdark »

А вот с примером по $newsArticles не будет. Тут надо как-то хитрить…
Great
Сообщения: 70
Зарегистрирован: 2011.07.27, 11:31

Re: Code completion в phpStorm

Сообщение Great »

Sam Dark,
Может здесь не совсем в тему, но можно ли тогда заодно поправить

Код: Выделить всё

$cs = Yii::app()->getClientScript(); 
 
?

Сейчас getClientScript() не подсвечивается.
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Code completion в phpStorm

Сообщение samdark »

Для этого нужно заюзать свой класс Yii:

Код: Выделить всё

class Yii extends YiiBase {
    /**
     * @static
     * @return CWebApplication
     */
    public static function app()
    {
        return parent::app();
    }
}
 
Аватара пользователя
durach
Сообщения: 1
Зарегистрирован: 2011.08.13, 12:45

Re: Code completion в phpStorm

Сообщение durach »

Я пошёл немного дальше. Не уверен куда приведёт это.

Код: Выделить всё

/**
 * @property CConfiguration $params
 * @property CFile $file <-- это мне лично в проекте нужно
 */
class FWebApplication extends CWebApplication {

}

class Yii extends YiiBase {
    /**
     * @return FWebApplication
     */
    public static function app() {
        return parent::app();
    }

    /**
     * Creates a Web application instance.
     * @param mixed $config application configuration.
     * @return CWebApplication
     */
    public static function createFWebApplication($config=null) {
        return self::createApplication('FWebApplication',$config);
    }
}
 
Sam Dark, куда репортить проблемы с автокомплитом? Возможно, будет достаточно необходимые @property прописать в классы

Скажем пока нашёл, что у CHttpRequest есть проблемы тоже
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Code completion в phpStorm

Сообщение samdark »

В официальный трекер. Можно сразу на меня вешать.
clod
Сообщения: 8
Зарегистрирован: 2011.06.21, 10:50

Re: Code completion в phpStorm

Сообщение clod »

Рекомендую попробовать Codelobster PHP Edition.
Там есть специальный плагин для Yii с очень приятным автокомплитом.
byteasdf
Сообщения: 99
Зарегистрирован: 2010.09.15, 09:01

Re: Code completion в phpStorm

Сообщение byteasdf »

Еще небольшой совет, прописать в phpDoc к модели следущее:

Код: Выделить всё

/**
 * @method ModelName   find()        find($condition='', $params=array())
 * @method ModelName   findByPk()    findByPk($pk,$condition='', $params=array())
 * @method ModelName[] findAllByPk() findAllByPk($pk,$condition='', $params=array())
 * @method ModelName[] findAll()     findAll($condition='', $params=array())
 * ну я добавлял только для тех, которые использовал, но идея ясна
 */
 
Не забыть прописать phpDoc к методу model();
И после этого начинают нормально работать с автодополнением следующие конструкции

Код: Выделить всё

$models = ModelName::model()->findAll($criteria)
foreach ($models as $model) {
    $model-> // тут появится автодополнение
}
 
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Code completion в phpStorm

Сообщение samdark »

clod
Сделали автокомплит для view?
lnghost
Сообщения: 134
Зарегистрирован: 2011.07.26, 18:05
Откуда: Воронеж
Контактная информация:

Re: Code completion в phpStorm

Сообщение lnghost »

clod писал(а):Рекомендую попробовать Codelobster PHP Edition.
Там есть специальный плагин для Yii с очень приятным автокомплитом.
А почему оно не умеет комплитить Model::model()->findAll();?
Конференция: yii@conference.jabber.ru Сайт: http://kamaran.ru
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Code completion в phpStorm

Сообщение samdark »

lnghost
Там не очень хорошо с автокомплитом по phpdoc.
clod
Сообщения: 8
Зарегистрирован: 2011.06.21, 10:50

Re: Code completion в phpStorm

Сообщение clod »

что именно там не хорошо?
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Code completion в phpStorm

Сообщение samdark »

В 2011 году было слишком многое нехорошо.
Ответить