See file /home/ihnet/dooframework/app/DooWebApp.php


+ Error on line 159

            $routeRs $controller->$routeRs[1]();

<?php
/**
 * DooWebApp class file.
 *
 * @author Leng Sheng Hong <darkredz@gmail.com>
 * @link http://www.doophp.com/
 * @copyright Copyright &copy; 2009 Leng Sheng Hong
 * @license http://www.doophp.com/license
 */


/**
 * DooWebApp is the global context that processed user's requests.
 *
 * <p>It manages the controllers in MVC pattern, handling URI requests 404 not found, redirection, etc.</p>
 *
 * <p>This class is tightly coupled with DooUriRouter.</p>
 *
 * @author Leng Sheng Hong <darkredz@gmail.com>
 * @version $Id: DooWebApp.php 1000 2009-07-7 18:27:22
 * @package doo.app
 * @since 1.0
 */
class DooWebApp{
    
/**
     * @var array routes defined in <i>routes.conf.php</i>
     */
    
public $route;

    
/**
     * Main function to run the web application
     */
    
public function run(){
        
$this->throwHeader$this->routeTo() );
    }
    
    
/**
     * Run the web application from a http request or a CLI execution.
     */
    
public function autorun(){
        
$opt getopt('u:');
        if(isset(
$opt['u'])===true){
            
$this->runFromCli();
        }else{
            
$this->run();
        }
    }
    
    
/**
     * Run the web application from a CLI execution. Execution through this method will set Doo::conf()->FROM_CLI to true.
     * Options required in CLI:
     * <code>
     *   // -u (required) URI: any route you have in your application
     *   -u="/any/uri/route/"
     * 
     *   // -m (optional) Request method: post, put, get, delete. Default is get.
     *   -m="get"
     * </code>
     */
    
public function runFromCli(){
        
$opt getopt('u:m::');
        if(isset(
$opt['u'])===true){
            
$uri $opt['u'];

            if(
$uri[0]!='/')
                
$uri '/' $uri;

            
Doo::conf()->SUBFOLDER '/';
            
$_SERVER['REQUEST_URI'] = $uri;
            
$_SERVER['REQUEST_METHOD'] = (isset($opt['m'])) ? $opt['m'] : 'GET';
            
Doo::conf()->FROM_CLI true;
            
$this->run();
        }        
    }
    
     
/**
     * Handles the routing process.
     * Auto routing, sub folder, subdomain, sub folder on subdomain are supported.
     * It can be used with or without the <i>index.php</i> in the URI
     * @return mixed HTTP status code such as 404 or URL for redirection
     */
    
public function routeTo(){
        
Doo::loadCore('uri/DooUriRouter');
        
$router = new DooUriRouter;
        
$routeRs $router->execute($this->route,Doo::conf()->SUBFOLDER);
        
        if(isset(
$routeRs['redirect'])===true){
            list(
$redirUrl$redirCode) = $routeRs['redirect'];
            
DooUriRouter::redirect($redirUrltrue$redirCode);
            return;
        }

        if(
$routeRs[0]!==null && $routeRs[1]!==null){
            
//dispatch, call Controller class
            
require_once Doo::conf()->BASE_PATH ."controller/DooController.php";
            
            if(
$routeRs[0][0]!=='['){
                if(
strpos($routeRs[0], '\\')!==false){
                    
$nsClassFile str_replace('\\','/',$routeRs[0]);
                    
$nsClassFile explode(Doo::conf()->APP_NAMESPACE_ID.'/'$nsClassFile2);
                    
$nsClassFile $nsClassFile[1];
                    require_once 
Doo::conf()->SITE_PATH Doo::conf()->PROTECTED_FOLDER $nsClassFile .'.php';                    
                }else{
                    require_once 
Doo::conf()->SITE_PATH Doo::conf()->PROTECTED_FOLDER "controller/{$routeRs[0]}.php";
                }
            }else{
                
$moduleParts explode(']'$routeRs[0]);
                
$moduleName substr($moduleParts[0],1);
                
                if(isset(
Doo::conf()->PROTECTED_FOLDER_ORI)===true){
                    require_once 
Doo::conf()->SITE_PATH Doo::conf()->PROTECTED_FOLDER_ORI 'module/'$moduleName .'/controller/'.$moduleParts[1].'.php';                    
                }else{
                    require_once 
Doo::conf()->SITE_PATH Doo::conf()->PROTECTED_FOLDER 'module/'$moduleName .'/controller/'.$moduleParts[1].'.php';                    
                    
Doo::conf()->PROTECTED_FOLDER_ORI Doo::conf()->PROTECTED_FOLDER;
                }
                
                
//set class name
                
$routeRs[0] = $moduleParts[1];
                
Doo::conf()->PROTECTED_FOLDER Doo::conf()->PROTECTED_FOLDER_ORI 'module/'.$moduleName.'/';
            }

            if(
strpos($routeRs[0], '/')!==false){
                
$clsname explode('/'$routeRs[0]);
                
$routeRs[0] = $clsnamesizeof($clsname)-];
            }

            
//if defined class name, use the class name to create the Controller object
            
$clsnameDefined = (sizeof($routeRs)===4);
            if(
$clsnameDefined)
                
$controller = new $routeRs[3];
            else
                
$controller = new $routeRs[0];

            
$controller->params $routeRs[2];

            if(isset(
$controller->params['__extension'])===true){
                
$controller->extension $controller->params['__extension'];
                unset(
$controller->params['__extension']);
            }
            if(isset(
$controller->params['__routematch'])===true){
                
$controller->routematch $controller->params['__routematch'];
                unset(
$controller->params['__routematch']);
            }

            if(
$_SERVER['REQUEST_METHOD']==='PUT')
                
$controller->init_put_vars();

            
//before run, normally used for ACL auth
            
if($clsnameDefined){
                if(
$rs $controller->beforeRun($routeRs[3], $routeRs[1])){
                    return 
$rs;
                }
            }else{
                if(
$rs $controller->beforeRun($routeRs[0], $routeRs[1])){
                    return 
$rs;
                }
            }

            $routeRs $controller->$routeRs[1]();

            
$controller->afterRun($routeRs);
            return 
$routeRs;
        }
        
//if auto route is on, then auto search Controller->method if route not defined by user
        
else if(Doo::conf()->AUTOROUTE){

            list(
$controller_name$method_name$method_name_ori$params$moduleName )= $router->auto_connect(Doo::conf()->SUBFOLDER, (isset($this->route['autoroute_alias'])===true)?$this->route['autoroute_alias']:null );

            if(empty(
$this->route['autoroute_force_dash'])===false){
                if(
$method_name!=='index' && $method_name===$method_name_ori && $method_name_ori[0]!=='_' && ctype_lower($method_name_ori)===false){
                    
$this->throwHeader(404);
                    return;
                }
            }
            
            if(
in_array($method_name, array('setHeader','setRawHeader','initPutVars','load','db','acl','beforeRun','cache','saveRendered','saveRenderedC','view','render','renderc','language','acceptType','setContentType','clientIP','afterRun','getKeyParam','getKeyParams','viewRenderAutomation','isAjax','isSSL','toXML','toJSON'))){ 
                
$this->throwHeader(404);
                return;
            }

            if(isset(
$moduleName)===true){
                
Doo::conf()->PROTECTED_FOLDER_ORI Doo::conf()->PROTECTED_FOLDER;
                
Doo::conf()->PROTECTED_FOLDER Doo::conf()->PROTECTED_FOLDER_ORI 'module/'.$moduleName.'/';
            }

            
$controller_file Doo::conf()->SITE_PATH Doo::conf()->PROTECTED_FOLDER "controller/{$controller_name}.php";

            if(
file_exists($controller_file)){
                require_once 
Doo::conf()->BASE_PATH ."controller/DooController.php";
                require_once 
$controller_file;

                
$methodsArray get_class_methods($controller_name);
                
                
//if controller name matches 2 classes with the same name, namespace and W/O namespace
                
if($methodsArray!==null){
                    
$unfoundInMethods = (in_array($method_name$methodsArray)===false && 
                                         
in_array($method_name .'_'strtolower($_SERVER['REQUEST_METHOD']), $methodsArray)===false );
                    if(
$unfoundInMethods){
                        
$methodsArray null;
                    }
                }

                
//if the method not in controller class, check for a namespaced class with the same file name.
                
if($methodsArray===null && isset(Doo::conf()->APP_NAMESPACE_ID)===true){
                    if(isset(
$moduleName)===true){
                        
$controller_name Doo::conf()->APP_NAMESPACE_ID '\\module\\'$moduleName .'\\controller\\' $controller_name;                        
                    }else{
                        
$controller_name Doo::conf()->APP_NAMESPACE_ID '\\controller\\' $controller_name;
                    }
                    
$methodsArray get_class_methods($controller_name);   
                }
                
                
//if method not found in both both controller and namespaced controller, 404 error
                
if($methodsArray===null){
                    if(isset(
Doo::conf()->PROTECTED_FOLDER_ORI)===true)
                        
Doo::conf()->PROTECTED_FOLDER Doo::conf()->PROTECTED_FOLDER_ORI;
                        
$this->throwHeader(404);
                        return;                    
                }                
            }
            else if(isset(
$moduleName)===true && isset(Doo::conf()->APP_NAMESPACE_ID)===true){
                if(isset(
Doo::conf()->PROTECTED_FOLDER_ORI)===true)
                    
Doo::conf()->PROTECTED_FOLDER Doo::conf()->PROTECTED_FOLDER_ORI;                
                
                
$controller_file Doo::conf()->SITE_PATH Doo::conf()->PROTECTED_FOLDER '/controller/'.$moduleName.'/'.$controller_name .'.php';                 
                
                if(
file_exists($controller_file)===false){
                    
$this->throwHeader(404);
                    return;                    
                }                
                
$controller_name Doo::conf()->APP_NAMESPACE_ID .'\\controller\\'.$moduleName.'\\'.$controller_name;                
                
#echo 'module = '.$moduleName.'<br>';
                #echo $controller_file.'<br>';                
                #echo $controller_name.'<br>';                   
                
$methodsArray get_class_methods($controller_name);                
            }            
            else{
                if(isset(
Doo::conf()->PROTECTED_FOLDER_ORI)===true)
                    
Doo::conf()->PROTECTED_FOLDER Doo::conf()->PROTECTED_FOLDER_ORI;                
                
$this->throwHeader(404);
                return;
            }
            
            
//check for REST request as well, utilized method_GET(), method_PUT(), method_POST, method_DELETE()
            
$restMethod $method_name .'_'strtolower($_SERVER['REQUEST_METHOD']);
            
$inRestMethod in_array($restMethod$methodsArray);
            
            
//check if method() and method_GET() etc. doesn't exist in the controller, 404 error
            
if( in_array($method_name$methodsArray)===false && $inRestMethod===false ){
                if(isset(
Doo::conf()->PROTECTED_FOLDER_ORI)===true)
                    
Doo::conf()->PROTECTED_FOLDER Doo::conf()->PROTECTED_FOLDER_ORI;
                
$this->throwHeader(404);
                return;
            }

            
//use method_GET() etc. if available
            
if( $inRestMethod===true ){
                
$method_name $restMethod;
            }
            
            
$controller = new $controller_name;

            
//if autoroute in this controller is disabled, 404 error
            
if($controller->autoroute===false){
                if(isset(
Doo::conf()->PROTECTED_FOLDER_ORI)===true)
                    
Doo::conf()->PROTECTED_FOLDER Doo::conf()->PROTECTED_FOLDER_ORI;
                
$this->throwHeader(404);
                return;
            }

            if(
$params!=null)
                
$controller->params $params;

            if(
$_SERVER['REQUEST_METHOD']==='PUT')
                
$controller->initPutVars();

            
//before run, normally used for ACL auth
            
if($rs $controller->beforeRun($controller_name$method_name)){
                return 
$rs;
            }

            
$routeRs $controller->$method_name();
            
$controller->afterRun($routeRs);
            return 
$routeRs;            
        }
        else{
            
$this->throwHeader(404);
            return;
        }
    }

    
/**
     * Reroute the URI to an internal route
     * @param string $routeuri route uri to redirect to
     * @param bool $is404 send a 404 status in header
     */
    
public function reroute($routeuri$is404=false){

        if(
Doo::conf()->SUBFOLDER!='/')
            
$_SERVER['REQUEST_URI'] = substr(Doo::conf()->SUBFOLDER0strlen(Doo::conf()->SUBFOLDER)-1) . $routeuri;
        else
            
$_SERVER['REQUEST_URI'] = $routeuri;

        if(isset(
Doo::conf()->PROTECTED_FOLDER_ORI)===true){
            
Doo::conf()->PROTECTED_FOLDER Doo::conf()->PROTECTED_FOLDER_ORI;
            unset( 
Doo::conf()->PROTECTED_FOLDER_ORI );
        }

        if(
$is404===true)
            
$this->setRawHeader('HTTP/1.1 404 Not Found');
        
//$this->routeTo();
        
$this->throwHeader$this->routeTo() );
    }

    
/**
     * Process a module from the main application.
     *
     * <p>This is similar to rerouting to a Controller. The framework offer 3 ways to process and render a module.</p>
     *
     * <p>Based on a predefined route:</p>
     * <code>
     * # The route is predefined in routes.conf.php
     * # $route['*']['/top/:nav'] = array('MyController', 'renderTop');
     * $data['top'] = Doo::app()->module('/top/banner');
     * </code>
     *
     * <p>Based on Controller name and Action method:</p>
     * <code>
     * Doo::app()->module('MyController', 'renderTop');
     *
     * # If controller is in sub folder
     * Doo::app()->module('folder/MyController', 'renderTop');
     *
     * # Passed in parameter if controller is using $this->param['var']
     * Doo::app()->module('MyController', 'renderTop', array('nav'=>'banner'));
     * </code>
     *
     * <p>If class name is different from controller filename:</p>
     * <code>
     * # filename is index.php, class name is Admin
     * Doo::app()->module(array('index', 'Admin'), 'renderTop');
     *
     * # in a sub folder
     * Doo::app()->module(array('admin/index', 'Admin'), 'renderTop');
     *
     * # with parameters
     * Doo::app()->module(array('admin/index', 'Admin'), 'renderTop', array('nav'=>'banner'));
     * </code>
     *
     * @param string|array $moduleUri URI or Controller name of the module
     * @param string $action Action to be called
     * @param array $params Parameters to be passed in to the Module
     * @return string Output of the module
     */
    
public function module($moduleUri$action=null$params=null){
        if(
$moduleUri[0]=='/'){
            if(
Doo::conf()->SUBFOLDER!='/')
                
$_SERVER['REQUEST_URI'] = substr(Doo::conf()->SUBFOLDER0strlen(Doo::conf()->SUBFOLDER)-1) . $moduleUri;
            else
                
$_SERVER['REQUEST_URI'] = $moduleUri;

            
$tmp Doo::conf()->PROTECTED_FOLDER;
            if(isset(
Doo::conf()->PROTECTED_FOLDER_ORI)===true){
                
Doo::conf()->PROTECTED_FOLDER Doo::conf()->PROTECTED_FOLDER_ORI;
                
$tmpOri Doo::conf()->PROTECTED_FOLDER_ORI;
            }
            
            
ob_start();
            
$this->routeTo();
            
$data ob_get_contents();
            
ob_end_clean();
            
            
Doo::conf()->PROTECTED_FOLDER $tmp;
            
            if(isset(
$tmpOri)===true)
                
Doo::conf()->PROTECTED_FOLDER_ORI $tmpOri;
            
            return 
$data;
        }
        
//if Controller name passed in:  Doo::app()->module('admin/SomeController', 'login',  array('nav'=>'home'));
        
else if(is_string($moduleUri)){
            
$controller_name $moduleUri;
            if(
strpos($moduleUri'/')!==false){
                
$arr explode('/'$moduleUri);
                
$controller_name $arr[sizeof($arr)-1];
            }
            require_once 
Doo::conf()->SITE_PATH Doo::conf()->PROTECTED_FOLDER "controller/$moduleUri.php";
            
$controller = new $controller_name;
            
$controller->params $params;
            if(
$rs $controller->beforeRun($controller_name$action)){
                
$this->throwHeader$rs );
                return;
            }

            
ob_start();
            
$rs $controller->{$action}();

            if(
$controller->autorender===true){
                
Doo::conf()->AUTO_VIEW_RENDER_PATH = array(strtolower(substr($controller_name0, -10)), strtolower(preg_replace('/(?<=\\w)(?=[A-Z])/','-$1'$action)));
            }
            
$controller->afterRun($rs);

            
$this->throwHeader$rs );

            
$data ob_get_contents();
            
ob_end_clean();
            return 
$data;
        }
        
//if array passed in. For controller file name != controller class name.
        //eg. Doo::app()->module(array('admin/Admin', 'AdminController'), 'login',  array('nav'=>'home'));
        
else{
            require_once 
Doo::conf()->SITE_PATH Doo::conf()->PROTECTED_FOLDER "controller/{$moduleUri[0]}.php";
            
$controller = new $moduleUri[1];
            
$controller->params $params;
            if(
$rs $controller->beforeRun($moduleUri[1], $action)){
                
$this->throwHeader$rs );
                return;
            }

            
ob_start();
            
$rs $controller->{$action}();

            if(
$controller->autorender===true){
                
Doo::conf()->AUTO_VIEW_RENDER_PATH = array(strtolower(substr($controller_name0, -10)), strtolower(preg_replace('/(?<=\\w)(?=[A-Z])/','-$1'$action)));
            }
            
$controller->afterRun($rs);

            
$this->throwHeader$rs );

            
$data ob_get_contents();
            
ob_end_clean();
            return 
$data;
        }
    }

    
/**
     * Advanced version of DooWebApp::module(). Process a module from the main application or other modules.
     *
     * Module rendered using this method is located in SITE_PATH/PROTECTED_FOLDER/module
     *
     * @param string $moduleName Name of the module folder. To execute Controller/method in the main application, pass a null or empty string value for $moduleName.
     * @param string|array $moduleUri URI or Controller name of the module
     * @param string $action Action to be called
     * @param array $params Parameters to be passed in to the Module
     * @return string Output of the module
     */
    
public function getModule($moduleName$moduleUri$action=null$params=null){
        if(empty(
$moduleName)===false){
            if(isset(
Doo::conf()->PROTECTED_FOLDER_ORI)===false){
                
Doo::conf()->PROTECTED_FOLDER_ORI $tmp Doo::conf()->PROTECTED_FOLDER;
                
Doo::conf()->PROTECTED_FOLDER $tmp 'module/'.$moduleName.'/';
                
$result $this->module($moduleUri$action$params);
                
Doo::conf()->PROTECTED_FOLDER $tmp;
            }else{
                
$tmp Doo::conf()->PROTECTED_FOLDER;
                
Doo::conf()->PROTECTED_FOLDER Doo::conf()->PROTECTED_FOLDER_ORI 'module/'.$moduleName.'/';
                
$result $this->module($moduleUri$action$params);
                
Doo::conf()->PROTECTED_FOLDER $tmp;                
            }
        }
        else{
            
$tmp Doo::conf()->PROTECTED_FOLDER;
            
Doo::conf()->PROTECTED_FOLDER Doo::conf()->PROTECTED_FOLDER_ORI;
            
$result $this->module($moduleUri$action$params);
            
Doo::conf()->PROTECTED_FOLDER $tmp;
        }
        return 
$result;
    }

    
/**
     * Analyze controller return value and send appropriate headers such as 404, 302, 301, redirect to internal routes.
     *
     * <p>It is very SEO friendly but you would need to know the basics of HTTP status code.</p>
     * <p>Automatically handles 404, include error document or redirect to inner route
     * to handle the error based on config <b>ERROR_404_DOCUMENT</b> and <b>ERROR_404_ROUTE</b></p>
     * <p>Controller return value examples:</p>
     * <code>
     * 404                                  #send 404 header
     * array('/internal/route', 404)        #send 404 header & redirect to an internal route
     * 'http://www.google.com'              #redirect to URL. default 302 Found sent
     * array('http://www.google.com',301)   #redirect to URL. forced 301 Moved Permenantly sent
     * array('/hello/sayhi', 'internal')    #redirect internally, 200 OK
     * </code>
     * @param mixed $code
     */
    
public function throwHeader($code){
        if(
headers_sent()){
            return;
        }
        if(
$code!=null){
            if(
is_int($code)){
                if(
$code===404){
                    
//Controller return 404, send 404 header, include file if ERROR_404_DOCUMENT is set by user
                    
$this->setRawHeader('HTTP/1.1 404 Not Found');
                    if(!empty(
Doo::conf()->ERROR_404_DOCUMENT)){
                        include 
Doo::conf()->SITE_PATH Doo::conf()->ERROR_404_DOCUMENT;
                    }
                    
//execute route to handler 404 display if ERROR_404_ROUTE is defined, the route handler shouldn't send any headers or return 404
                    
elseif(!empty(Doo::conf()->ERROR_404_ROUTE)){
                        
$this->reroute(Doo::conf()->ERROR_404_ROUTEtrue);
                    }
                    exit;
                }
                
//if not 404, just send the header code
                
else{
                    
DooUriRouter::redirect(null,true$code);
                }
            }
            elseif(
is_string($code)){
                
//Controller return the redirect location, it sends 302 Found
                
DooUriRouter::redirect($code);
            }
            elseif(
is_array($code)){
                
//Controller return array('/some/routes/here', 'internal')
                
if($code[1]=='internal'){
                    
$this->reroute($code[0]);
                    exit;
                }
                
//Controller return array('http://location.to.redirect', 301)
                
elseif($code[1]===404){
                    
$this->reroute($code[0],true);
                    exit;
                }
                
// if array('http://location.to.redirect', 302), 302 Found is sent before Location:
                
elseif($code[1]===302){
                    
DooUriRouter::redirect($code[0],true$code[1], array("HTTP/1.1 302 Found"));
                }
                
//else redirect with the http status defined,eg. 307 Moved Temporarily
                
else if($code[1] > 299 && $code[1] < 400){
                    
DooUriRouter::redirect($code[0],true$code[1]);
                }
                else{
                    if(!empty(
$code[1]))
                        
$this->setRawHeader(''true$code[1]);
                    return 
$this->reroute($code[0]);                    
                }
            }
        }
    }
    
    
/**
     * Set header. eg. setHeader('Content-Type', 'application/json')
     * @param string $name Header name
     * @param string $content Header content
     */
    
public function setHeader($name$content){
        
header($name .': '$content);
    }

    
/**
     * Set raw header. eg. 'HTTP/1.1 200 OK'
     * @param string $rawHeader Header content
     * @param bool $replace Whether to replace the same header that is previously set
     * @param int $code HTTP status code
     */    
    
public function setRawHeader($rawHeader$replace=true$code=null){
        
header($rawHeader$replace$code);        
    }
    
    
/**
     * To debug variables with DooPHP's diagnostic view
     * @param mixed $var The variable to view in diagnostics.
     */
    
public function debug($var){
        throw new 
DooDebugException($var);
    }

}


* Stack Trace...

  1. /home/ihnet/public_html/split_okura/index.php(29) calling run()
  2. /home/ihnet/dooframework/app/DooWebApp.php(34) calling routeTo()


* Variables...  Conf .  GET  .  POST  .  Session  .  Cookie 


object(DooConfig)#1 (24) {
  
["AUTOLOAD"] => array(3) {
    [
0] =>   string(5"class"
    
[1] =>   string(5"model"
    
[2] =>   string(10"controller"
  
}
  [
"SITE_PATH"] => string(36"/home/ihnet/public_html/split_okura/"
  
["PROTECTED_FOLDER"] => string(10"protected/"
  
["BASE_PATH"] => string(25"/home/ihnet/dooframework/"
  
["LOG_PATH"] => NULL
  
["APP_URL"] => string(30"http://ihamms.net/split_okura/"
  
["SUBFOLDER"] => string(13"/split_okura/"
  
["APP_MODE"] => string(3"dev"
  
["AUTOROUTE"] => bool(true)
  [
"DEBUG_ENABLED"] => bool(true)
  [
"ERROR_404_DOCUMENT"] => NULL
  
["ERROR_404_ROUTE"] => string(6"/error"
  
["CACHE_PATH"] => NULL
  
["AUTO_VIEW_RENDER_PATH"] => NULL
  
["MEMCACHE"] => NULL
  
["TEMPLATE_ENGINE"] => string(7"DooView"
  
["TEMPLATE_SHOW_COMMENT"] => NULL
  
["TEMPLATE_ALLOW_PHP"] => NULL
  
["TEMPLATE_COMPILE_ALWAYS"] => NULL
  
["TEMPLATE_GLOBAL_TAGS"] => NULL
  
["MODULES"] => NULL
  
["APP_NAMESPACE_ID"] => NULL
  
["CHMOD_DEFAULT"] => int(511)
  [
"FROM_CLI"] => bool(false)
}
$_COOKIE Variables array(0) {
}

BACK TO TOP
DooPHP Diagnostics - Undefined property: MainController::$Array

See file /home/ihnet/dooframework/app/DooWebApp.php


+ Error on line 159

            $routeRs $controller->$routeRs[1]();

<?php
/**
 * DooWebApp class file.
 *
 * @author Leng Sheng Hong <darkredz@gmail.com>
 * @link http://www.doophp.com/
 * @copyright Copyright &copy; 2009 Leng Sheng Hong
 * @license http://www.doophp.com/license
 */


/**
 * DooWebApp is the global context that processed user's requests.
 *
 * <p>It manages the controllers in MVC pattern, handling URI requests 404 not found, redirection, etc.</p>
 *
 * <p>This class is tightly coupled with DooUriRouter.</p>
 *
 * @author Leng Sheng Hong <darkredz@gmail.com>
 * @version $Id: DooWebApp.php 1000 2009-07-7 18:27:22
 * @package doo.app
 * @since 1.0
 */
class DooWebApp{
    
/**
     * @var array routes defined in <i>routes.conf.php</i>
     */
    
public $route;

    
/**
     * Main function to run the web application
     */
    
public function run(){
        
$this->throwHeader$this->routeTo() );
    }
    
    
/**
     * Run the web application from a http request or a CLI execution.
     */
    
public function autorun(){
        
$opt getopt('u:');
        if(isset(
$opt['u'])===true){
            
$this->runFromCli();
        }else{
            
$this->run();
        }
    }
    
    
/**
     * Run the web application from a CLI execution. Execution through this method will set Doo::conf()->FROM_CLI to true.
     * Options required in CLI:
     * <code>
     *   // -u (required) URI: any route you have in your application
     *   -u="/any/uri/route/"
     * 
     *   // -m (optional) Request method: post, put, get, delete. Default is get.
     *   -m="get"
     * </code>
     */
    
public function runFromCli(){
        
$opt getopt('u:m::');
        if(isset(
$opt['u'])===true){
            
$uri $opt['u'];

            if(
$uri[0]!='/')
                
$uri '/' $uri;

            
Doo::conf()->SUBFOLDER '/';
            
$_SERVER['REQUEST_URI'] = $uri;
            
$_SERVER['REQUEST_METHOD'] = (isset($opt['m'])) ? $opt['m'] : 'GET';
            
Doo::conf()->FROM_CLI true;
            
$this->run();
        }        
    }
    
     
/**
     * Handles the routing process.
     * Auto routing, sub folder, subdomain, sub folder on subdomain are supported.
     * It can be used with or without the <i>index.php</i> in the URI
     * @return mixed HTTP status code such as 404 or URL for redirection
     */
    
public function routeTo(){
        
Doo::loadCore('uri/DooUriRouter');
        
$router = new DooUriRouter;
        
$routeRs $router->execute($this->route,Doo::conf()->SUBFOLDER);
        
        if(isset(
$routeRs['redirect'])===true){
            list(
$redirUrl$redirCode) = $routeRs['redirect'];
            
DooUriRouter::redirect($redirUrltrue$redirCode);
            return;
        }

        if(
$routeRs[0]!==null && $routeRs[1]!==null){
            
//dispatch, call Controller class
            
require_once Doo::conf()->BASE_PATH ."controller/DooController.php";
            
            if(
$routeRs[0][0]!=='['){
                if(
strpos($routeRs[0], '\\')!==false){
                    
$nsClassFile str_replace('\\','/',$routeRs[0]);
                    
$nsClassFile explode(Doo::conf()->APP_NAMESPACE_ID.'/'$nsClassFile2);
                    
$nsClassFile $nsClassFile[1];
                    require_once 
Doo::conf()->SITE_PATH Doo::conf()->PROTECTED_FOLDER $nsClassFile .'.php';                    
                }else{
                    require_once 
Doo::conf()->SITE_PATH Doo::conf()->PROTECTED_FOLDER "controller/{$routeRs[0]}.php";
                }
            }else{
                
$moduleParts explode(']'$routeRs[0]);
                
$moduleName substr($moduleParts[0],1);
                
                if(isset(
Doo::conf()->PROTECTED_FOLDER_ORI)===true){
                    require_once 
Doo::conf()->SITE_PATH Doo::conf()->PROTECTED_FOLDER_ORI 'module/'$moduleName .'/controller/'.$moduleParts[1].'.php';                    
                }else{
                    require_once 
Doo::conf()->SITE_PATH Doo::conf()->PROTECTED_FOLDER 'module/'$moduleName .'/controller/'.$moduleParts[1].'.php';                    
                    
Doo::conf()->PROTECTED_FOLDER_ORI Doo::conf()->PROTECTED_FOLDER;
                }
                
                
//set class name
                
$routeRs[0] = $moduleParts[1];
                
Doo::conf()->PROTECTED_FOLDER Doo::conf()->PROTECTED_FOLDER_ORI 'module/'.$moduleName.'/';
            }

            if(
strpos($routeRs[0], '/')!==false){
                
$clsname explode('/'$routeRs[0]);
                
$routeRs[0] = $clsnamesizeof($clsname)-];
            }

            
//if defined class name, use the class name to create the Controller object
            
$clsnameDefined = (sizeof($routeRs)===4);
            if(
$clsnameDefined)
                
$controller = new $routeRs[3];
            else
                
$controller = new $routeRs[0];

            
$controller->params $routeRs[2];

            if(isset(
$controller->params['__extension'])===true){
                
$controller->extension $controller->params['__extension'];
                unset(
$controller->params['__extension']);
            }
            if(isset(
$controller->params['__routematch'])===true){
                
$controller->routematch $controller->params['__routematch'];
                unset(
$controller->params['__routematch']);
            }

            if(
$_SERVER['REQUEST_METHOD']==='PUT')
                
$controller->init_put_vars();

            
//before run, normally used for ACL auth
            
if($clsnameDefined){
                if(
$rs $controller->beforeRun($routeRs[3], $routeRs[1])){
                    return 
$rs;
                }
            }else{
                if(
$rs $controller->beforeRun($routeRs[0], $routeRs[1])){
                    return 
$rs;
                }
            }

            $routeRs $controller->$routeRs[1]();

            
$controller->afterRun($routeRs);
            return 
$routeRs;
        }
        
//if auto route is on, then auto search Controller->method if route not defined by user
        
else if(Doo::conf()->AUTOROUTE){

            list(
$controller_name$method_name$method_name_ori$params$moduleName )= $router->auto_connect(Doo::conf()->SUBFOLDER, (isset($this->route['autoroute_alias'])===true)?$this->route['autoroute_alias']:null );

            if(empty(
$this->route['autoroute_force_dash'])===false){
                if(
$method_name!=='index' && $method_name===$method_name_ori && $method_name_ori[0]!=='_' && ctype_lower($method_name_ori)===false){
                    
$this->throwHeader(404);
                    return;
                }
            }
            
            if(
in_array($method_name, array('setHeader','setRawHeader','initPutVars','load','db','acl','beforeRun','cache','saveRendered','saveRenderedC','view','render','renderc','language','acceptType','setContentType','clientIP','afterRun','getKeyParam','getKeyParams','viewRenderAutomation','isAjax','isSSL','toXML','toJSON'))){ 
                
$this->throwHeader(404);
                return;
            }

            if(isset(
$moduleName)===true){
                
Doo::conf()->PROTECTED_FOLDER_ORI Doo::conf()->PROTECTED_FOLDER;
                
Doo::conf()->PROTECTED_FOLDER Doo::conf()->PROTECTED_FOLDER_ORI 'module/'.$moduleName.'/';
            }

            
$controller_file Doo::conf()->SITE_PATH Doo::conf()->PROTECTED_FOLDER "controller/{$controller_name}.php";

            if(
file_exists($controller_file)){
                require_once 
Doo::conf()->BASE_PATH ."controller/DooController.php";
                require_once 
$controller_file;

                
$methodsArray get_class_methods($controller_name);
                
                
//if controller name matches 2 classes with the same name, namespace and W/O namespace
                
if($methodsArray!==null){
                    
$unfoundInMethods = (in_array($method_name$methodsArray)===false && 
                                         
in_array($method_name .'_'strtolower($_SERVER['REQUEST_METHOD']), $methodsArray)===false );
                    if(
$unfoundInMethods){
                        
$methodsArray null;
                    }
                }

                
//if the method not in controller class, check for a namespaced class with the same file name.
                
if($methodsArray===null && isset(Doo::conf()->APP_NAMESPACE_ID)===true){
                    if(isset(
$moduleName)===true){
                        
$controller_name Doo::conf()->APP_NAMESPACE_ID '\\module\\'$moduleName .'\\controller\\' $controller_name;                        
                    }else{
                        
$controller_name Doo::conf()->APP_NAMESPACE_ID '\\controller\\' $controller_name;
                    }
                    
$methodsArray get_class_methods($controller_name);   
                }
                
                
//if method not found in both both controller and namespaced controller, 404 error
                
if($methodsArray===null){
                    if(isset(
Doo::conf()->PROTECTED_FOLDER_ORI)===true)
                        
Doo::conf()->PROTECTED_FOLDER Doo::conf()->PROTECTED_FOLDER_ORI;
                        
$this->throwHeader(404);
                        return;                    
                }                
            }
            else if(isset(
$moduleName)===true && isset(Doo::conf()->APP_NAMESPACE_ID)===true){
                if(isset(
Doo::conf()->PROTECTED_FOLDER_ORI)===true)
                    
Doo::conf()->PROTECTED_FOLDER Doo::conf()->PROTECTED_FOLDER_ORI;                
                
                
$controller_file Doo::conf()->SITE_PATH Doo::conf()->PROTECTED_FOLDER '/controller/'.$moduleName.'/'.$controller_name .'.php';                 
                
                if(
file_exists($controller_file)===false){
                    
$this->throwHeader(404);
                    return;                    
                }                
                
$controller_name Doo::conf()->APP_NAMESPACE_ID .'\\controller\\'.$moduleName.'\\'.$controller_name;                
                
#echo 'module = '.$moduleName.'<br>';
                #echo $controller_file.'<br>';                
                #echo $controller_name.'<br>';                   
                
$methodsArray get_class_methods($controller_name);                
            }            
            else{
                if(isset(
Doo::conf()->PROTECTED_FOLDER_ORI)===true)
                    
Doo::conf()->PROTECTED_FOLDER Doo::conf()->PROTECTED_FOLDER_ORI;                
                
$this->throwHeader(404);
                return;
            }
            
            
//check for REST request as well, utilized method_GET(), method_PUT(), method_POST, method_DELETE()
            
$restMethod $method_name .'_'strtolower($_SERVER['REQUEST_METHOD']);
            
$inRestMethod in_array($restMethod$methodsArray);
            
            
//check if method() and method_GET() etc. doesn't exist in the controller, 404 error
            
if( in_array($method_name$methodsArray)===false && $inRestMethod===false ){
                if(isset(
Doo::conf()->PROTECTED_FOLDER_ORI)===true)
                    
Doo::conf()->PROTECTED_FOLDER Doo::conf()->PROTECTED_FOLDER_ORI;
                
$this->throwHeader(404);
                return;
            }

            
//use method_GET() etc. if available
            
if( $inRestMethod===true ){
                
$method_name $restMethod;
            }
            
            
$controller = new $controller_name;

            
//if autoroute in this controller is disabled, 404 error
            
if($controller->autoroute===false){
                if(isset(
Doo::conf()->PROTECTED_FOLDER_ORI)===true)
                    
Doo::conf()->PROTECTED_FOLDER Doo::conf()->PROTECTED_FOLDER_ORI;
                
$this->throwHeader(404);
                return;
            }

            if(
$params!=null)
                
$controller->params $params;

            if(
$_SERVER['REQUEST_METHOD']==='PUT')
                
$controller->initPutVars();

            
//before run, normally used for ACL auth
            
if($rs $controller->beforeRun($controller_name$method_name)){
                return 
$rs;
            }

            
$routeRs $controller->$method_name();
            
$controller->afterRun($routeRs);
            return 
$routeRs;            
        }
        else{
            
$this->throwHeader(404);
            return;
        }
    }

    
/**
     * Reroute the URI to an internal route
     * @param string $routeuri route uri to redirect to
     * @param bool $is404 send a 404 status in header
     */
    
public function reroute($routeuri$is404=false){

        if(
Doo::conf()->SUBFOLDER!='/')
            
$_SERVER['REQUEST_URI'] = substr(Doo::conf()->SUBFOLDER0strlen(Doo::conf()->SUBFOLDER)-1) . $routeuri;
        else
            
$_SERVER['REQUEST_URI'] = $routeuri;

        if(isset(
Doo::conf()->PROTECTED_FOLDER_ORI)===true){
            
Doo::conf()->PROTECTED_FOLDER Doo::conf()->PROTECTED_FOLDER_ORI;
            unset( 
Doo::conf()->PROTECTED_FOLDER_ORI );
        }

        if(
$is404===true)
            
$this->setRawHeader('HTTP/1.1 404 Not Found');
        
//$this->routeTo();
        
$this->throwHeader$this->routeTo() );
    }

    
/**
     * Process a module from the main application.
     *
     * <p>This is similar to rerouting to a Controller. The framework offer 3 ways to process and render a module.</p>
     *
     * <p>Based on a predefined route:</p>
     * <code>
     * # The route is predefined in routes.conf.php
     * # $route['*']['/top/:nav'] = array('MyController', 'renderTop');
     * $data['top'] = Doo::app()->module('/top/banner');
     * </code>
     *
     * <p>Based on Controller name and Action method:</p>
     * <code>
     * Doo::app()->module('MyController', 'renderTop');
     *
     * # If controller is in sub folder
     * Doo::app()->module('folder/MyController', 'renderTop');
     *
     * # Passed in parameter if controller is using $this->param['var']
     * Doo::app()->module('MyController', 'renderTop', array('nav'=>'banner'));
     * </code>
     *
     * <p>If class name is different from controller filename:</p>
     * <code>
     * # filename is index.php, class name is Admin
     * Doo::app()->module(array('index', 'Admin'), 'renderTop');
     *
     * # in a sub folder
     * Doo::app()->module(array('admin/index', 'Admin'), 'renderTop');
     *
     * # with parameters
     * Doo::app()->module(array('admin/index', 'Admin'), 'renderTop', array('nav'=>'banner'));
     * </code>
     *
     * @param string|array $moduleUri URI or Controller name of the module
     * @param string $action Action to be called
     * @param array $params Parameters to be passed in to the Module
     * @return string Output of the module
     */
    
public function module($moduleUri$action=null$params=null){
        if(
$moduleUri[0]=='/'){
            if(
Doo::conf()->SUBFOLDER!='/')
                
$_SERVER['REQUEST_URI'] = substr(Doo::conf()->SUBFOLDER0strlen(Doo::conf()->SUBFOLDER)-1) . $moduleUri;
            else
                
$_SERVER['REQUEST_URI'] = $moduleUri;

            
$tmp Doo::conf()->PROTECTED_FOLDER;
            if(isset(
Doo::conf()->PROTECTED_FOLDER_ORI)===true){
                
Doo::conf()->PROTECTED_FOLDER Doo::conf()->PROTECTED_FOLDER_ORI;
                
$tmpOri Doo::conf()->PROTECTED_FOLDER_ORI;
            }
            
            
ob_start();
            
$this->routeTo();
            
$data ob_get_contents();
            
ob_end_clean();
            
            
Doo::conf()->PROTECTED_FOLDER $tmp;
            
            if(isset(
$tmpOri)===true)
                
Doo::conf()->PROTECTED_FOLDER_ORI $tmpOri;
            
            return 
$data;
        }
        
//if Controller name passed in:  Doo::app()->module('admin/SomeController', 'login',  array('nav'=>'home'));
        
else if(is_string($moduleUri)){
            
$controller_name $moduleUri;
            if(
strpos($moduleUri'/')!==false){
                
$arr explode('/'$moduleUri);
                
$controller_name $arr[sizeof($arr)-1];
            }
            require_once 
Doo::conf()->SITE_PATH Doo::conf()->PROTECTED_FOLDER "controller/$moduleUri.php";
            
$controller = new $controller_name;
            
$controller->params $params;
            if(
$rs $controller->beforeRun($controller_name$action)){
                
$this->throwHeader$rs );
                return;
            }

            
ob_start();
            
$rs $controller->{$action}();

            if(
$controller->autorender===true){
                
Doo::conf()->AUTO_VIEW_RENDER_PATH = array(strtolower(substr($controller_name0, -10)), strtolower(preg_replace('/(?<=\\w)(?=[A-Z])/','-$1'$action)));
            }
            
$controller->afterRun($rs);

            
$this->throwHeader$rs );

            
$data ob_get_contents();
            
ob_end_clean();
            return 
$data;
        }
        
//if array passed in. For controller file name != controller class name.
        //eg. Doo::app()->module(array('admin/Admin', 'AdminController'), 'login',  array('nav'=>'home'));
        
else{
            require_once 
Doo::conf()->SITE_PATH Doo::conf()->PROTECTED_FOLDER "controller/{$moduleUri[0]}.php";
            
$controller = new $moduleUri[1];
            
$controller->params $params;
            if(
$rs $controller->beforeRun($moduleUri[1], $action)){
                
$this->throwHeader$rs );
                return;
            }

            
ob_start();
            
$rs $controller->{$action}();

            if(
$controller->autorender===true){
                
Doo::conf()->AUTO_VIEW_RENDER_PATH = array(strtolower(substr($controller_name0, -10)), strtolower(preg_replace('/(?<=\\w)(?=[A-Z])/','-$1'$action)));
            }
            
$controller->afterRun($rs);

            
$this->throwHeader$rs );

            
$data ob_get_contents();
            
ob_end_clean();
            return 
$data;
        }
    }

    
/**
     * Advanced version of DooWebApp::module(). Process a module from the main application or other modules.
     *
     * Module rendered using this method is located in SITE_PATH/PROTECTED_FOLDER/module
     *
     * @param string $moduleName Name of the module folder. To execute Controller/method in the main application, pass a null or empty string value for $moduleName.
     * @param string|array $moduleUri URI or Controller name of the module
     * @param string $action Action to be called
     * @param array $params Parameters to be passed in to the Module
     * @return string Output of the module
     */
    
public function getModule($moduleName$moduleUri$action=null$params=null){
        if(empty(
$moduleName)===false){
            if(isset(
Doo::conf()->PROTECTED_FOLDER_ORI)===false){
                
Doo::conf()->PROTECTED_FOLDER_ORI $tmp Doo::conf()->PROTECTED_FOLDER;
                
Doo::conf()->PROTECTED_FOLDER $tmp 'module/'.$moduleName.'/';
                
$result $this->module($moduleUri$action$params);
                
Doo::conf()->PROTECTED_FOLDER $tmp;
            }else{
                
$tmp Doo::conf()->PROTECTED_FOLDER;
                
Doo::conf()->PROTECTED_FOLDER Doo::conf()->PROTECTED_FOLDER_ORI 'module/'.$moduleName.'/';
                
$result $this->module($moduleUri$action$params);
                
Doo::conf()->PROTECTED_FOLDER $tmp;                
            }
        }
        else{
            
$tmp Doo::conf()->PROTECTED_FOLDER;
            
Doo::conf()->PROTECTED_FOLDER Doo::conf()->PROTECTED_FOLDER_ORI;
            
$result $this->module($moduleUri$action$params);
            
Doo::conf()->PROTECTED_FOLDER $tmp;
        }
        return 
$result;
    }

    
/**
     * Analyze controller return value and send appropriate headers such as 404, 302, 301, redirect to internal routes.
     *
     * <p>It is very SEO friendly but you would need to know the basics of HTTP status code.</p>
     * <p>Automatically handles 404, include error document or redirect to inner route
     * to handle the error based on config <b>ERROR_404_DOCUMENT</b> and <b>ERROR_404_ROUTE</b></p>
     * <p>Controller return value examples:</p>
     * <code>
     * 404                                  #send 404 header
     * array('/internal/route', 404)        #send 404 header & redirect to an internal route
     * 'http://www.google.com'              #redirect to URL. default 302 Found sent
     * array('http://www.google.com',301)   #redirect to URL. forced 301 Moved Permenantly sent
     * array('/hello/sayhi', 'internal')    #redirect internally, 200 OK
     * </code>
     * @param mixed $code
     */
    
public function throwHeader($code){
        if(
headers_sent()){
            return;
        }
        if(
$code!=null){
            if(
is_int($code)){
                if(
$code===404){
                    
//Controller return 404, send 404 header, include file if ERROR_404_DOCUMENT is set by user
                    
$this->setRawHeader('HTTP/1.1 404 Not Found');
                    if(!empty(
Doo::conf()->ERROR_404_DOCUMENT)){
                        include 
Doo::conf()->SITE_PATH Doo::conf()->ERROR_404_DOCUMENT;
                    }
                    
//execute route to handler 404 display if ERROR_404_ROUTE is defined, the route handler shouldn't send any headers or return 404
                    
elseif(!empty(Doo::conf()->ERROR_404_ROUTE)){
                        
$this->reroute(Doo::conf()->ERROR_404_ROUTEtrue);
                    }
                    exit;
                }
                
//if not 404, just send the header code
                
else{
                    
DooUriRouter::redirect(null,true$code);
                }
            }
            elseif(
is_string($code)){
                
//Controller return the redirect location, it sends 302 Found
                
DooUriRouter::redirect($code);
            }
            elseif(
is_array($code)){
                
//Controller return array('/some/routes/here', 'internal')
                
if($code[1]=='internal'){
                    
$this->reroute($code[0]);
                    exit;
                }
                
//Controller return array('http://location.to.redirect', 301)
                
elseif($code[1]===404){
                    
$this->reroute($code[0],true);
                    exit;
                }
                
// if array('http://location.to.redirect', 302), 302 Found is sent before Location:
                
elseif($code[1]===302){
                    
DooUriRouter::redirect($code[0],true$code[1], array("HTTP/1.1 302 Found"));
                }
                
//else redirect with the http status defined,eg. 307 Moved Temporarily
                
else if($code[1] > 299 && $code[1] < 400){
                    
DooUriRouter::redirect($code[0],true$code[1]);
                }
                else{
                    if(!empty(
$code[1]))
                        
$this->setRawHeader(''true$code[1]);
                    return 
$this->reroute($code[0]);                    
                }
            }
        }
    }
    
    
/**
     * Set header. eg. setHeader('Content-Type', 'application/json')
     * @param string $name Header name
     * @param string $content Header content
     */
    
public function setHeader($name$content){
        
header($name .': '$content);
    }

    
/**
     * Set raw header. eg. 'HTTP/1.1 200 OK'
     * @param string $rawHeader Header content
     * @param bool $replace Whether to replace the same header that is previously set
     * @param int $code HTTP status code
     */    
    
public function setRawHeader($rawHeader$replace=true$code=null){
        
header($rawHeader$replace$code);        
    }
    
    
/**
     * To debug variables with DooPHP's diagnostic view
     * @param mixed $var The variable to view in diagnostics.
     */
    
public function debug($var){
        throw new 
DooDebugException($var);
    }

}


* Stack Trace...

  1. /home/ihnet/public_html/split_okura/index.php(29) calling run()
  2. /home/ihnet/dooframework/app/DooWebApp.php(34) calling routeTo()


* Variables...  Conf .  GET  .  POST  .  Session  .  Cookie 


object(DooConfig)#1 (24) {
  
["AUTOLOAD"] => array(3) {
    [
0] =>   string(5"class"
    
[1] =>   string(5"model"
    
[2] =>   string(10"controller"
  
}
  [
"SITE_PATH"] => string(36"/home/ihnet/public_html/split_okura/"
  
["PROTECTED_FOLDER"] => string(10"protected/"
  
["BASE_PATH"] => string(25"/home/ihnet/dooframework/"
  
["LOG_PATH"] => NULL
  
["APP_URL"] => string(30"http://ihamms.net/split_okura/"
  
["SUBFOLDER"] => string(13"/split_okura/"
  
["APP_MODE"] => string(3"dev"
  
["AUTOROUTE"] => bool(true)
  [
"DEBUG_ENABLED"] => bool(true)
  [
"ERROR_404_DOCUMENT"] => NULL
  
["ERROR_404_ROUTE"] => string(6"/error"
  
["CACHE_PATH"] => NULL
  
["AUTO_VIEW_RENDER_PATH"] => NULL
  
["MEMCACHE"] => NULL
  
["TEMPLATE_ENGINE"] => string(7"DooView"
  
["TEMPLATE_SHOW_COMMENT"] => NULL
  
["TEMPLATE_ALLOW_PHP"] => NULL
  
["TEMPLATE_COMPILE_ALWAYS"] => NULL
  
["TEMPLATE_GLOBAL_TAGS"] => NULL
  
["MODULES"] => NULL
  
["APP_NAMESPACE_ID"] => NULL
  
["CHMOD_DEFAULT"] => int(511)
  [
"FROM_CLI"] => bool(false)
}
$_COOKIE Variables array(0) {
}

BACK TO TOP
DooPHP Diagnostics - Function name must be a string

See file /home/ihnet/public_html/split_okura/index.php


+ Error on line 29

Doo::app()->run();

<?php
include './protected/config/common.conf.php';
include 
'./protected/config/routes.conf.php';
// include './protected/config/db.conf.php';

#Just include this for production mode
//include $config['BASE_PATH'].'deployment/deploy.php';
include $config['BASE_PATH'].'Doo.php';
include 
$config['BASE_PATH'].'app/DooConfig.php';

# Uncomment for auto loading the framework classes.
spl_autoload_register('Doo::autoload');

Doo::conf()->set($config);

# remove this if you wish to see the normal PHP error view.
include $config['BASE_PATH'].'diagnostic/debug.php';

# database usage
//Doo::useDbReplicate();    #for db replication master-slave usage
//Doo::db()->setMap($dbmap);
//Doo::db()->setDb($dbconfig, $config['APP_MODE']);
//Doo::db()->sql_tracking = true;    #for debugging/profiling purpose

Doo::app()->route $route;

# Uncomment for DB profiling
//Doo::logger()->beginDbProfile('doowebsite');
Doo::app()->run();

//Doo::logger()->endDbProfile('doowebsite');
//Doo::logger()->rotateFile(20);
//Doo::logger()->writeDbProfiles();
?>


* Stack Trace...


Error Object
(
    [
message:protected] => Function name must be a string
    
[string:Error:private] => 
    [
code:protected] => 0
    
[file:protected] => /home/ihnet/dooframework/app/DooWebApp.php
    
[line:protected] => 159
    
[trace:Error:private] => Array
        (
            [
0] => Array
                (
                    [
file] => /home/ihnet/dooframework/app/DooWebApp.php
                    
[line] => 34
                    
[function] => routeTo
                    
[class] => DooWebApp
                    
[type] => ->
                    [
args] => Array
                        (
                        )

                )

            [
1] => Array
                (
                    [
file] => /home/ihnet/public_html/split_okura/index.php
                    
[line] => 29
                    
[function] => run
                    
[class] => DooWebApp
                    
[type] => ->
                    [
args] => Array
                        (
                        )

                )

        )

    [
previous:Error:private] => 
)


* Variables...  Conf .  GET  .  POST  .  Session  .  Cookie 


object(DooConfig)#1 (24) {
  
["AUTOLOAD"] => array(3) {
    [
0] =>   string(5"class"
    
[1] =>   string(5"model"
    
[2] =>   string(10"controller"
  
}
  [
"SITE_PATH"] => string(36"/home/ihnet/public_html/split_okura/"
  
["PROTECTED_FOLDER"] => string(10"protected/"
  
["BASE_PATH"] => string(25"/home/ihnet/dooframework/"
  
["LOG_PATH"] => NULL
  
["APP_URL"] => string(30"http://ihamms.net/split_okura/"
  
["SUBFOLDER"] => string(13"/split_okura/"
  
["APP_MODE"] => string(3"dev"
  
["AUTOROUTE"] => bool(true)
  [
"DEBUG_ENABLED"] => bool(true)
  [
"ERROR_404_DOCUMENT"] => NULL
  
["ERROR_404_ROUTE"] => string(6"/error"
  
["CACHE_PATH"] => NULL
  
["AUTO_VIEW_RENDER_PATH"] => NULL
  
["MEMCACHE"] => NULL
  
["TEMPLATE_ENGINE"] => string(7"DooView"
  
["TEMPLATE_SHOW_COMMENT"] => NULL
  
["TEMPLATE_ALLOW_PHP"] => NULL
  
["TEMPLATE_COMPILE_ALWAYS"] => NULL
  
["TEMPLATE_GLOBAL_TAGS"] => NULL
  
["MODULES"] => NULL
  
["APP_NAMESPACE_ID"] => NULL
  
["CHMOD_DEFAULT"] => int(511)
  [
"FROM_CLI"] => bool(false)
}
$_COOKIE Variables array(0) {
}

BACK TO TOP