Предположим, что у вас есть файл index.php
, который является точкой входа приложения. В этом файле у вас есть код для регистрации всех сервисов в вашем приложении. Мое личное предпочтение состоит в том, чтобы сохранить файл index.php
как можно меньше и поместить последовательность загрузки (регистрации служб) в другой файл.
Так что я бы в index.php
<?php
use \Phalcon\DI\FactoryDefault as PhDi;
error_reporting(E_ALL);
date_default_timezone_set('US/Eastern');
if (!defined('ROOT_PATH')) {
define('ROOT_PATH', dirname(dirname(__FILE__)));
}
try {
include ROOT_PATH . "/app/var/bootstrap.php";
/**
* Handle the request
*/
$di = new PhDi();
$app = new Bootstrap($di);
echo $app->run(array());
} catch (\Phalcon\Exception $e) {
echo $e->getMessage();
} catch (PDOException $e){
echo $e->getMessage();
}
The bootstrap.php содержит функции, необходимые для инициализации всех услуг, в которых нуждается приложение. Один из этих услуг может быть следующим:
public function initEventsManager($app)
{
$evManager = new \Phalcon\Events\Manager();
$app->setEventsManager($evManager);
$evManager->attach(
"application",
function($event, $application) {
switch ($event->getType()) {
case 'boot':
$this->handleBoot();
break;
case 'beforeStartModule':
$this->handleBeforeStartModule();
break;
case 'afterStartModule':
$this->handleAfterStartModule();
break;
case 'beforeHandleRequest':
$this->handleBeforeHandleRequest();
break;
case 'afterHandleRequest':
$this->handleAfterHandleRequest();
break;
}
);
}
В файле bootstrap.php
вы должны иметь соответствующие функции, такие как handleBoot
handleAfterHandleRequest
и т.д., которые будут обрабатывать код так, как вам нужно.
Вышеупомянутая функция регистрации диспетчера событий должна быть вызвана с помощью параметра Phalcon \ Mvc \ Application в качестве параметра. Хорошее место, чтобы поставить его бы здесь (на примерах)
https://github.com/phalcon/website/blob/master/app/var/bootstrap.php#L62
Спасибо за ответ. Я попробую. – arothuis
Хм. Это все еще не совсем то, что я ищу, поскольку мне требуется переписать/расширить стандартный код приложения. Ваш пример полезен для выяснения того, как прикрепить bootevent к менеджеру событий. Вот почему я принял этот ответ. – arothuis
У меня была небольшая ошибка с вашим очень полезным кодом. Для дальнейшего использования, если проверка $ event (в коммутаторе) не работает, попробуйте $ event-> getType(). Этот метод вернет правильный тип или имя события. – arothuis