Автозавершение кода для phalconphp

Хотелось бы иметь простой доступ к списку методов некоторых сервисов и передаваемых в них параметров не заглядывая в документацию.
Конечно, из любого контроллера можно обратиться к стандартному сервису через переменную с соответствующим названием $this->tag, $this->url, автодополнение срабатывает как положено в любом нормальном IDE. Как настроить автодополнение для phalconphp для Netbeans?
Но в случае использования своих сервисов IDE уже молчит. Да и возникает необходимость обращаться как к своим, так и к стандартным сервисам phalcon не только из контроллеров.
В моделях возникает необходимость добавить методы получения данных из соответствующих таблиц, в случаях, когда критерии выборки из таблицы сложные, в этом случае неправильно пихать такой код в контроллер, тем более, когда получаем эти данные с такими критериями в нескольких местах одного, а то и нескольких контроллеров. При этом может возникнуть необходимость обратиться к методам сервисов: базы данных, acl.
К примеру, надо получить список задач:
проверяем, чтобы ответственный за выполнение задачи или постановщик совпадал с ИД текущего пользователя или он входил в список наблюдателей задачи;
обнуляем поля таблицы, для просмотра которых пользователей не имеет прав (обусловлено использованием dataTables — данные передаются по аякс и в данных должны присутствовать все столбцы).
Получается — из модели мы как минимум должны обратиться к методам сервисов auth (предпочитаю использовать отдельный сервис для данных пользователя, который умеет инициализироваться по ключу из кук, запомнить авторизацию в куках и забыть при выходе) и acl (\Phalcon\Acl\Adapter), в некоторых случаях еще возникает необходимость вызвать методы адаптера базы данных (\Phalcon\Db\Adapter\Pdo) или модель-менеджера (\Phalcon\Mvc\Model\Manager).
Можно, конечно, воспользоваться конструкцией вида:

\Phalcon\DI::getDefault()->getModelManager()
\Phalcon\DI::getDefault()->getAuth()
# или 
\Phalcon\DI::getDefault()->get('modelManager')
\Phalcon\DI::getDefault()->get('auth')

Но, вот незадача — в обоих случаях уже надо будет лезть в документацию, чтобы узнать точное название нужного метода и порядок передаваемых параметров. А хотелось бы, чтобы IDE сразу выдало подсказку для всех возможных методов.
Для начала: я предпочитаю при инициализации сервисов объявить глобальную функцию getDi():

/**
 * @return \Phalcon\DI\FactoryDefault
 */
function getDi() {
	static $di = null;
	if (!$di) {
		$di = new \Phalcon\DI\FactoryDefault();
	}
	return $di;
}

потому как не люблю лишнего нагромождения кода, которое создаст использование конструкции \Phalcon\DI::getDefault().
Далее, создаем папочку в проекте, к примеру my-phalcon.
И копируем туда phalcon-devtools\ide\{номер версии}\Phalcon\DI.php.
Вносим нужные изменения в этот файлик — добавляем вызов недостающих там сервисов:

namespace Phalcon {
	...
	class DI implements \Phalcon\DiInterface {
		...
		/**
		 * @return \Phalcon\Security
		 */
		public function getSecurity() {}
		/**
		 * @return \Handy\Models\Auth
		 */
		public function getAuth() {}
		/**
		 * @return \Phalcon\Acl\Adapter\Memory
		 */
		public function getAcl() {}
		/**
		 * @return \Phalcon\Db\Adapter\Pdo\Mysql
		 */
		public function getDb() {}
		/**
		 * @return \Phalcon\Tag
		 */
		public function getTag() {}
		...
		# ваши сервисы
		...

И, вуаля: автозавершение для всех доступных методов, всех нужных сервисов работает!
my-phalcon-di

Добавить комментарий