作曲家自动加载不起作用



我正在为我构建的 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,文件夹名称必须像命名空间一样具有大写字母。如果你不想改变,你可以使用作曲家的类映射。

相关内容

  • 没有找到相关文章

最新更新