我正在为我构建的 mvc 框架使用作曲家自动加载。我已经测试过它,并在Vagrant环境(配置: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}}
但是,当我使用 Ubuntu 13.04+php5.4 在我的 vps 上部署它时,它开始给出未找到类的错误。当我把它放在共享主机上时,也会发生同样的情况。
我尝试自我更新,再次删除供应商目录和作曲家安装无济于事。
这是我的作曲家.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": "contact@glend.me",
"homepage": "http://glend.me",
"role": "Developer"
}
],
"support": {
"email": "support@blueberry.al"
},
"autoload": {
"psr-0": {"Elysium": "src/"}
},
"require": {
"filp/whoops": "1.*",
"swiftmailer/swiftmailer": "*",
"vlucas/valitron": "1.1.5",
"ircmaxell/password-compat": "1.0.3"
}
}
和路由器.php:
<?php
namespace ElysiumCore;
use ElysiumControllers;
/**
* Manages all routing and URL requests for the framework.
* @package ElysiumCore
*/
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 ControllersError();
$ctrl->notFound();
break;
}
default:
{
break;
}
}
}
}
我自己修复了它,如果您遵循 PSR-0,文件夹名称必须像命名空间一样具有大写字母。如果你不想改变,你可以使用作曲家的类映射。