Seltsames PHP verhalten

dragon001

New Member
Ich hab mir ein MVC Pattern System geschrieben.
Dabei gibt es verschiedene Typen der Controller.
Action
View
API
Ajax
etc.

Bei View, wo ich momentan probleme habe, werden diese wie folgt durchlaufen:

$class->input();
$class->prepare();
$class->prozess();
$class->output();

Das eigentliche Problem:
Ich lade eine zu verwendende Klasse in prepare mittels include_once.
Möchte ich dann auf diese Zugreiffen in der prozess Methode, gibt es Sie auf einmal nicht mehr.
Wenn ich aber im dispatcher auf folgenden Code umbaue:

echo '1';
$class->input();
echo '2';
$class->prepare();
echo '3';
$class->prozess();
echo '4';
$class->output();

bekomme ich 1234

Das heißt jedes Element wird durchlaufen.
Ich kapier nur nicht, wieso im Prepare eine klasse existiert, aber im prozess eben nicht.
Was auch noch seltsam ist, private eigenschaften, die in prepare werte zugewiesen bekommen, haben den inhalt null im prozess teil.
Versteh es leider nicht.

Hier der View Controller, um den es geht:

PHP:
<?
    class extension_admin_controller_resource extends basics_controller_viewController{
        public function __construct(){
                parent::__construct('admin');
                $this->setTemplatePath('admin');
        }
		private $resource;
		private $next;
		private $page;
		private $elements;
        public function prepare(){
        	$this->setNavigationIdent('admin');
        	core::register_lib('pagination');
			$this->page = new paginator();
        	core::register_lib('usersettings');
			$this->elements = usersettings::getInstance()->getItemsPerPage();
        }
		public function input(){
			$target = new link_model();
			$target->modul = 'admin';
			$target->action = 'resource';
			$this->page->setLink($target);
			$this->page->setLimit($this->elements);
			$this->resource = db_AclResourceQuery::create()
				->orderByParent('ASC');
			$this->page->setCount($this->resource->count());
			$this->page->page();
			$this->page->printCSS();
			$this->next = ($this->getVar('next')==false)?1:$this->getVar('next');**/
		}
		public function prozess(){
        	$result = $this->resource->paginate($this->next,$this->elements);
			$runner = array();
			if(count($result)>0){
				foreach($result as $key){
					$tmp = array(
						'objectid'=>$key->getObjectId(),
						'ident'=>$key->getIdent(),
						'description'=>$key->getDescription(),
						'parent'=>'',
						'enabled'=>''
					);
					$tmp['enabled'] = $key->getEnabled()?'y':'n';
					if($key->getParenT()>0){
						$sub = db_AclResourceQuery::create()->findPk($key->getParent());
						if($sub!=null)
							$tmp['parent'] = $sub->getIdent();
					}
					$runner[count($runner)] = (object)$tmp;
				}
				if(count($runner)<1)
					$runner = 'n';
			}else
				$runner = 'n';
			$this->assign('running',$runner);
        }
		public function output(){
        	$this->render('view');
        }
    }

Die abstracte Vordefinition des View Controllers:

PHP:
<?
abstract class basics_controller_viewController extends basics_controller_abstract implements  basics_controller_view{
    protected $config;
    public function __construct($modul){
        parent::__construct();
        if(core::fileExists($modul.'/config/'.ENV_MODE, 'extension'))
			$this->config = core::load($modul.'/config/'.ENV_MODE, 'extension',true);
        else
            $this->config = new config_config();
        core::register_lib('view');
        core::register_lib('language');
    }
    abstract public function prepare();
    abstract public function input();
    abstract public function prozess();
    abstract public function output();
    protected function render($template){
        view_enginee::getInstance()->render($this->template.$template.filesystem::TPL);
    }
    protected function assign($pattern,$value){
        view_enginee::getInstance()->assign($pattern,$value);
    }
}

Die Unterste Controller Klasse:

PHP:
<?

abstract class basics_controller_abstract{
    protected $template;
    public function __construct(){

    }
    protected function setTemplatePath($modulname){
        $this->template = 'extension/'.$modulname.'/view/';
    }
    protected function dump($var,$color=true,$return=false){
        if(ENV_MODE=='developer')
            if($color && $return)
                return dev_dump::dump($var);
            else if($color && !$return)
                print dev_dump::dump($var);
            else if(!$color && $return)
                return dev_dump::dumpSTD($var);
            else
                print dev_dump::dumpSTD($var);
    }
	public function relocate($target){
		header('Location: '.link_generator::create($target));
		die;
	}
	public function getCookie(){
		return core::get('cookie');
	}
	public function getSession(){
		return session::getInstance();
	}
	public function getVar($name,$value='string'){
		return router::get($name,$value);
	}
	public function getVarArray(){
		return router::get_all();
	}
	public function getConfig(){
		return core::getConfig();
	}
	public function getCore($name){
		return core::get($name);
	}
	public function setCore($name,$value){
		core::register($name, $value);
	}
	public function isSsl(){
		return router::isSsl();
	}
	public function setNavigationIdent($var){
		view_enginee::getInstance()->setNavSelected($var);
	}
}

Und das View Interface

PHP:
<?

    interface basics_controller_view{
        public function prepare();
		public function input();
		public function prozess();
		public function output();
    }

Hof ihr könnt sehen, was mir entgangen ist.

Chris
 
Problem ist gelöst.
danke für die Aufmerksamkeit.
Lösung des Problems war einfach.
Ich habe versucht in Input auf Methoden zuzugreifen, die erst in prepare definiert waren.
Aufrufreihenfolge:

input
prepare
...
 
Back
Top