@bighoc
php/javascript developer

Как добавит комментарии для сервис локатора в Yii 2?

Пользуюсь phpstorm, люблю когда все переменные подсказываются и подсвечиваються.
Где я могу указать что Yii::$app->cart это экземпляр обекта /some/namespace/Cart ?
  • Вопрос задан
  • 778 просмотров
Решения вопроса 1
iiifx
@iiifx
PHP, OOP, SOLID, Yii2, Composer, PHPStorm
Есть вариант решения от Александр Макаров: https://github.com/samdark/yii2-cookbook/blob/mast...

Меня тоже немного достало, что автокомплит для своих компонентов не работает. Что приходится постоянно делать так:
/** @var LanguageManager $languageManager */
$languageManager = Yii::$app->languageManager;

Пока вариант от Александр Макаров не проверял.

Добавлено:
Попробовал сегодня, вроде бы работает нормально.

Я создал в корне autocomplete.php, в котором разместил свои компоненты:
class Yii extends \yii\BaseYii
{
    /**
     * @var BaseApplication|WebApplication|ConsoleApplication
     */
    public static $app;
}

/**
 * @property backend\components\bootstrap\SectionTreeManager $sectionTreeManager
 * @property backend\components\constructor\Component        $constructor
 * @property backend\components\rbac\SystemAuthManager       $systemAuthManager
 * @property backend\components\rbac\UserAuthManager         $userAuthManager
 * @property common\components\language\LanguageManager      $languageManager
 * @property common\components\view\ViewBlockManager         $viewBlock
 */
abstract class BaseApplication extends \yii\base\Application {}

/**
 * @property backend\components\bootstrap\SectionTreeManager $sectionTreeManager
 * @property backend\components\constructor\Component        $constructor
 * @property backend\components\rbac\SystemAuthManager       $systemAuthManager
 * @property backend\components\rbac\UserAuthManager         $userAuthManager
 * @property common\components\language\LanguageManager      $languageManager
 * @property common\components\view\ViewBlockManager         $viewBlock
 */
class WebApplication extends \yii\web\Application {}

/**
 * @property backend\components\bootstrap\SectionTreeManager $sectionTreeManager
 * @property backend\components\constructor\Component        $constructor
 * @property backend\components\rbac\SystemAuthManager       $systemAuthManager
 * @property backend\components\rbac\UserAuthManager         $userAuthManager
 * @property common\components\language\LanguageManager      $languageManager
 * @property common\components\view\ViewBlockManager         $viewBlock
 */
class ConsoleApplication extends \yii\console\Application {}

После чего в IDE нужно файл @vendor/yiisoft/yii2/Yii.php пометить как текстовый, чтобы IDE не ругался на 2 класса Yii в глобальном пространстве.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
miraage
@miraage
Старый прогер
Я создавал файлик с шорткатами, и писал что-то вроде такого:

// EDIT

Я думал это Yii первой версии. Но можно по аналогии сделать со второй.

/** @return CWebApplication|CConsoleApplication */
function app()
{
  return Yii::$app;
}

/** @return CHttpRequest */
function req()
{
  return Yii::$app->getComponent('request');
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы