Witam
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()
{
if(in_array('admin', $this->privileges)) 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 (IMG:
http://forum.php.pl/style_emoticons/default/smile.gif)
Pozdrawiam Apo