2014-01-12 7 views
1

Я использую автозагрузку композитора для рамки mvc, которую я создал. Я тестировал его и работал в среде Vagrant (config: http://pastebin.com/aAs2TFMh) и даже в Windows.Автозагрузка композитора не работает

Я получаю эту ошибку: {"error":{"type":"Whoops\\Exception\\ErrorException","message":"Class 'Elysium\\Controllers\\Error' not found","file":"\/home\/glendme\/public_html\/clubsmade\/src\/elysium\/core\/Router.php","line":99}}

Однако, когда я разворачивал его на моем VPS с Ubuntu 13.04 + php5.4 он начал давать классу не найденные ошибки. То же самое произошло, когда я положил его на общий хост.

Я попробовал самообновление, удалив каталог поставщика и композитор, установив снова безрезультатно.

Вот мой composer.json,

{ 
"name": "glend/elysium", 
"description": "PHP MVC Framework.", 
"version" : "0.1.0-dev", 
"keywords" : ["mvc", "framework", "elysium", "glend"], 
"homepage" : "http://mvc.blueberry.al", 
"license" : "GPL-3.0+", 
"authors": [ 
    { 
     "name": "Glend Gjermeni", 
     "email": "[email protected]", 
     "homepage": "http://glend.me", 
     "role": "Developer" 
    } 
], 
"support": { 
    "email": "[email protected]" 
}, 
"autoload": { 
    "psr-0": {"Elysium": "src/"} 
}, 
"require": { 
    "filp/whoops": "1.*", 
    "swiftmailer/swiftmailer": "*", 
    "vlucas/valitron": "1.1.5", 
    "ircmaxell/password-compat": "1.0.3" 
} 

}

И router.php:

<?php 

namespace Elysium\Core; 
use Elysium\Controllers; 

/** 
* Manages all routing and URL requests for the framework. 
* @package Elysium\Core 
*/ 
class Router 
{ 
    private $url, $controller, $method, $params; 
    private $allowedChars = array('-', '_', '/', '\\', '.'); 

    /** 
    * Reads the passed URL from GET request into controller, method and params variables. 
    */ 
    public function __construct() 
    { 
     if(!empty($_GET['page'])) 
     { 
      if(ctype_alnum(str_replace($this->allowedChars, '', $_GET['page']))) 
      { 
       $this->url = $_GET['page']; 
      } 
      else 
      { 
       throw new Exception("Malformed URL"); 
      } 
     } 
     else 
     { 
      $this->url = 'index'; 
     } 

     $this->url = explode('/', $this->url); 

     $this->controller = implode('_', array_map('ucfirst', explode('_', str_replace('-', '_', array_shift($this->url))))); 
     $this->method = explode('_', str_replace('-', '_', array_shift($this->url))); 

     for($i = 1; $i < count($this->method); $i++) 
     { 
      ucfirst($this->method[$i]); 
     } 

     $this->method = implode('_', $this->method); 
     $this->params = &$this->url; 
    } 

    /** 
    * Initializes correct controller based on URL requested. 
    */ 
    public function commit() 
    { 
     $class = "Elysium\\Controllers\\$this->controller"; 

     if(class_exists($class)) 
     { 
      if(method_exists($class, $this->method)) 
      { 
       if(empty($this->params)) 
       { 

        $ctrl = new $class; 
        $ctrl->{$this->method}(); 
       } 
       else 
       { 
        $ctrl = new $class; 
        $ctrl->{$this->method}($this->params); 
       } 
      } 
      else if(empty($this->method)) 
      { 
       $ctrl = new $class; 
       $ctrl->index(); 
      } 
      else 
      { 
       self::error(404); 
      } 
     } 
     else 
     { 
      self::error(404); 
     } 
    } 

    /** 
    * Initializes default Error controller based on error code provided and shows the appropriate error page. 
    * @param $code 
    */ 
    public static function error($code) 
    { 
     switch($code) 
     { 
      case 404: 
      { 
       $ctrl = new Controllers\Error(); 
       $ctrl->notFound(); 
       break; 
      } 
      default: 
      { 
       break; 
      } 
     } 
    } 
} 
+0

Ничто в вашей информации не объясняет, что вы испытываете. Быть конкретной. Перечислите точное сообщение об ошибке, перечислите строку кода, в которой он включен, и укажите список, который должен отсутствовать, и где он находится. – Sven

+0

@Sven Прошу прощения за то, что вы не указали ошибку, но вы не получите многого от строки кода, это просто класс, вызываемый. Я добавил их сейчас, и все классы отсутствуют не только один, это не автозагрузка. –

+1

У вас, вероятно, есть несоответствие в случае букв для пространства имен. Пространство имен используется как часть пути - Windows не заботится о случае, Linux - конкретный случай. – Danack

ответ

5

Fixed это сам, имя папки должны иметь заглавную букву так же, как пространство имен, если это вы придерживаетесь PSR-0. Если вы не хотите менять, вы можете использовать classmap композитора.

+0

Это то, что я подозревал, но у вас не было никаких доказательств в вашем вопросе. – Sven

Смежные вопросы