Exemplo n.º 1
0
 /**
  * Trigger an event call to the application.
  *
  * @access public
  * @param  string $event  The event to trigger within the appliction.
  * @param  array  $params Parameters to pass to the application.
  * @static
  */
 public static function trigger($event, $params)
 {
     // Start the profiler
     Profiler::register('Core', 'Event.' . $event);
     // Create a reference to the users event listener
     $listener = Config::get('settings', 'project') . '\\EventListener';
     // Call the appropriate event listener function
     $listener::$event($params);
     // Stop the profiler
     Profiler::deregister('Core', 'Event.' . $event);
 }
Exemplo n.º 2
0
 /**
  * Initialises the application configuration and runs the router.
  *
  * @access public
  * @param  string      $projectName The name of the project the user wishes to run.
  * @param  Core\Router $router      The routes the users application requires.
  */
 public function __construct($projectName, $router = null)
 {
     // Start the profiler
     Profiler::start();
     Profiler::register('Core', 'Front');
     // Load the configuration for this project
     Profiler::register('Core', 'Config');
     Config::load($projectName);
     Profiler::deregister('Core', 'Config');
     Profiler::register('Core', 'Request');
     Request::setUrl();
     Profiler::deregister('Core', 'Request');
     // Set the project information
     $this->_projectName = $projectName;
     $this->_router = $router ?: new Router();
     // And route
     $this->route();
 }
Exemplo n.º 3
0
 /**
  * Provides a nice interface to call view helpers.
  *
  * This is a magic function, so any calls to the view/view helper which do not
  * exist will end up here. We only pass through the first parameter to make for
  * a nicer implementation in each view helper. This is why it needs to be an array.
  *
  * @access public
  * @param  string $helperName The View Helper that we wish to use.
  * @param  array  $param      The parameters that need to be passed to the View Helper.
  * @return string
  * @magic
  */
 public function __call($helperName, $param)
 {
     // Try and instantiate the helper
     // Note: Calling section_Author will translate to Section\Author
     $viewHelperClassName = Config::get('settings', 'project') . '\\View\\Helper\\' . str_replace('_', '\\', $helperName);
     $viewHelper = new $viewHelperClassName();
     // Render and return
     Profiler::register('Helper', $helperName);
     $content = $viewHelper->render(isset($param[0]) ? $param[0] : array());
     Profiler::deregister('Helper', $helperName);
     return $content;
 }
Exemplo n.º 4
0
 /**
  * Whilst in controller context, move to another controller/action.
  *
  * When forwarding to a new action or controller/action, the URL will not
  * change, this is an internal redirect.
  *
  * Forwarding to an action in the same controller
  *
  * <code>
  * $this->forward('newAction');
  * </code>
  *
  * Forwarding to a new controller and action.
  *
  * <code>
  * $this->forward('newAction', 'newController');
  * </code>
  *
  * @access public
  * @param  string    $action     The action we wish to forward to.
  * @param  string    $controller The controller we wish to forward to.
  * @throws Exception             From the Dispatcher if the controller/action does not exist.
  */
 public function forward($action = 'index', $controller = '')
 {
     // Reregister the action in the profile
     Profiler::deregister('Action', $this->view->action);
     // Set which controller has called this function. If it is the same as
     // .. the user specified controller then we do not need to instantiate
     // .. a whole new controller, we can simply forward to its action
     $controllerCaller = str_replace(Config::get('settings', 'project') . '\\Controller\\', '', get_called_class());
     // Calling an action in the same controller
     if ($controller == '' || $controller == $controllerCaller) {
         Dispatcher::loadAction($this->child, $action);
     } else {
         Profiler::deregister('Controller', $this->view->controller);
         Dispatcher::loadController($controller, $action);
     }
 }
Exemplo n.º 5
0
 /**
  * Load a controllers action, and ask the View to render it.
  *
  * @access public
  * @param  object  $controller Controller object that we want to load the action for.
  * @param  string  $action     Name of the action we wish to load.
  * @static
  */
 public static function loadAction($controller, $action)
 {
     // Start the profiler
     Profiler::register('Core', 'Dispatcher');
     // In order to have pretty URL's we allow the basic routing to contain
     // .. dashes in their action names which will be removed here. It allows
     // .. /index/hello-world to be routed to /index/helloworld.
     $action = str_replace('-', '', $action);
     $actionExists = is_callable(array($controller, $action . 'Action'));
     $controllerName = str_replace(Config::get('settings', 'project') . '\\Controller\\', '', get_class($controller));
     // Make sure that the controller has the action
     if (!$actionExists) {
         // If this is the error controller then there is no hope
         if ($controllerName == 'Error') {
             die('Sorry, an error occurred whilst processing your request.');
         } else {
             if ($action != 'error') {
                 Profiler::deregister('Core', 'Dispatcher');
                 Dispatcher::loadAction($controller, 'error');
             } else {
                 Profiler::deregister('Core', 'Dispatcher');
                 Profiler::deregister('Controller', $controllerName);
                 Dispatcher::loadController('Error', 'notFound');
             }
         }
     }
     // We are able to call the controllers action
     Event::trigger('initAction', array('controller' => $controller, 'action' => $action));
     Profiler::deregister('Core', 'Dispatcher');
     Profiler::register('Action', $action);
     // Set the controller and action that we are heading to
     $controller->view->controller = $controllerName;
     $controller->view->action = $action;
     // Call and render this action
     $controller->{$action . 'Action'}();
     $controller->view->render();
 }
Exemplo n.º 6
0
 /**
  * Start the routing procedure and find a valid route, if any.
  *
  * @access public
  */
 public function route()
 {
     // Start the profiler
     Profiler::register('Core', 'Router');
     // First, let's look at the URL the user supplied
     $requestUrl = array_values(array_filter(explode('/', Request::getUrl())));
     $requestRoute = null;
     // Loop over each route and test to see if they are valid
     foreach (self::$_routes as $route) {
         if ($this->routeTest($requestUrl, $route)) {
             $requestRoute = $route;
             break;
         }
     }
     // We have completed the route matching
     // Finish the setup of the request object
     Profiler::register('Core', 'Request');
     if ($requestRoute) {
         $_GET['controller'] = $route->endpoint['controller'];
         $_GET['action'] = $route->endpoint['action'];
         Request::setUrlFragments(str_replace($this->_routePath, '', Request::getUrl()));
     } else {
         Request::setUrlFragments(Request::getUrl(), true);
     }
     Profiler::deregister('Core', 'Request');
     // Inform the event listener a request has been initialised
     Event::trigger('initRequest', array('controller' => Request::get('controller'), 'action' => Request::get('action')));
     // And stop the profiler
     Profiler::deregister('Core', 'Router');
     Profiler::deregister('Core', 'Front');
     // And dispatch
     Dispatcher::loadController(Request::get('controller'), Request::get('action'));
 }