Mam 3 klasy.
1. Dispather który dołącza plik z odpowiednią klasą na podstawie urla przekazanego przez router i wywołuje obiekt.
2. ActionController klasa abstrakcyjna która jest szablonem dla akcji
3. viewAction przykładowa klasa akcji
1 Problem dotyczy wymuszenia zadeklarowanej składowej w klasie abstrakcyjnej:
<?php abstract class ActionController { private $privileges = array(); // ta skladowa musi byc zadeklarowana w każdej klasie dziedziczącej, próbowałem ro
bić: abstract private $privileges = array(); ale wyskakuje tylko błąd /* * Check access to action * */ final public function _renderAccess() { else } } ?>
Następnie mam problem z wywołaniem metody _renderAccess w taki sposób:
<?php class Dispather { private $_action, $_controller; /** * * */ public function isDispathable($controller, $action, $parameters) { $this->_controller = $this->controllerFormat($controller); $this->_action = $this->actionFormat($action); $_directory = MODULE_DIR . $this->_controller . '/' . $this->_action . '.php'; throw new AposException("Controller directory never set."); throw new AposException('Controller "'.$this->_controller.'" not found'); require_once($_directory); $_action = new $this->_action . '()'; $_action->_renderAccess(); // w taki sposób ta metoda wogle sie niechce wywołać } } ?>
Klasa akcji
<?php require_once(APOS_DIR . 'framework/controller/ActionController.php'); class viewAction extends ActionController { private $privileges = array('admin'); // tej składowej i tak nie zobaczy metoda _renderAccess i zwróci 'Public' nie wiem dlaczego public function __construct() { $this->_renderAccess(); // dopiero w taki sposób wykona sie ta metoda } } ?>
Z góry błogosławieństwo za pomoc
Pozdrawiam Apo