123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239 |
- <?php
- /**
- *
- * Cube Framework $Id$ ywBq0GD/Wfo6NkXOTpHP+JXJC2leduaTfdJqu899Nds=
- *
- * @link http://codecu.be/framework
- * @copyright Copyright (c) 2014 CodeCube SRL
- * @license http://codecu.be/framework/license Commercial License
- *
- * @version 1.0
- */
- /**
- * bootstrap class
- */
- namespace Cube\Application;
- use Cube\Application,
- Cube\Controller\Front as FrontController;
- class Bootstrap
- {
- /**
- * default name of resources namespace
- */
- const RESOURCES_NAMESPACE = 'Resource';
- /**
- *
- * application object
- *
- * @var \Cube\Application
- */
- protected $_application;
- /**
- *
- * resources array
- *
- * @var array
- */
- protected $_resources = array();
- /**
- *
- * bootstrap front controller resource
- * final class so it cannot be overridden by module bootstraps
- */
- final public function __construct()
- {
- $this->setResource('FrontController', FrontController::getInstance()
- ->setOptions(
- $this->getApplication()->getOptions()));
- }
- /**
- *
- * get the application object
- *
- * @return \Cube\Application
- */
- public function getApplication()
- {
- if (!($this->_application instanceof Application)) {
- $this->_application = Application::getInstance();
- }
- return $this->_application;
- }
- /**
- *
- * add a resource to the resources array
- *
- * @param string $name
- * @param mixed $resource
- *
- * @return \Cube\Application\Bootstrap
- */
- public function setResource($name, $resource)
- {
- if ($this->hasResource($name) === false) {
- $this->_resources[$name] = $resource;
- }
- // else {
- // throw new \InvalidArgumentException(sprintf("A resource with the name '%s' already exists", $name));
- // }
- return $this;
- }
- /**
- *
- * get a resource
- *
- * @param string $name
- *
- * @return mixed|bool
- */
- public function getResource($name)
- {
- if ($this->hasResource($name) === true) {
- return $this->_resources[$name];
- }
- return false;
- }
- /**
- *
- * remove a resource
- *
- * @param string $name
- *
- * @return $this
- */
- public function removeResource($name)
- {
- if ($this->hasResource($name) === true) {
- unset($this->_resources[$name]);
- }
- return $this;
- }
- /**
- *
- * check if a resource exists
- *
- * @param string $name
- *
- * @return bool
- */
- public function hasResource($name)
- {
- if (array_key_exists($name, $this->_resources)) {
- return true;
- }
- return false;
- }
- /**
- *
- * bootstrap a single resource
- * we will search for the resource either in the default resources folder or in the bootstrap of the requested module
- * a resource will only be bootstrapped once
- *
- * @param string $resource
- *
- * @throws \DomainException
- */
- protected function _bootstrap($resource)
- {
- if (!$this->hasResource($resource)) {
- $methodName = '_init' . ucfirst($resource);
- $resourceName = '\\' . __NAMESPACE__ . '\\' . self::RESOURCES_NAMESPACE . '\\' . ucfirst($resource);
- if (class_exists($resourceName)) {
- $class = new $resourceName();
- if ($class instanceof Resource\ResourceInterface) {
- $options = $this->getApplication()->getOptions();
- $object = $class->setOptions($options)
- ->init();
- $this->setResource($resource, $object);
- }
- else {
- throw new \DomainException(sprintf("'%s' must be implement the ResourceInterface interface.",
- $resourceName));
- }
- }
- else if (method_exists($this, $methodName)) {
- $result = $this->$methodName();
- $this->setResource($resource, $result);
- }
- }
- }
- /**
- *
- * bootstrap one, multiple (array) or all resources if no parameters are set
- * final method
- *
- * @param null|string|array $resource
- *
- * @return \Cube\Application\Bootstrap
- */
- final public function bootstrap($resource = null)
- {
- if (is_string($resource)) {
- $this->_bootstrap($resource);
- }
- else if (is_array($resource)) {
- foreach ($resource as $res) {
- $this->_bootstrap($res);
- }
- }
- else {
- $options = $this->getApplication()->getOptions();
- // bootstrap default application resources that are initialized in the application configuration
- foreach ((array)$options as $name => $config) {
- $this->_bootstrap($name);
- }
- // bootstrap resources defined in the active module bootstrap file
- foreach ((array)get_class_methods($this) as $method) {
- if (strpos($method, '_init') === 0) {
- $this->_bootstrap(lcfirst(
- str_replace('_init', '', $method)));
- }
- }
- }
- return $this;
- }
- /**
- *
- *
- * run the application
- */
- public function run()
- {
- $front = $this->getResource('FrontController');
- return $front->dispatch();
- }
- }
|