Phalcon:名称空间类声明错误

时间:2014-08-28 16:32:18

标签: php namespaces phalcon

我的文件夹结构是:

/app/config/loader.php
/app/validation/Domain.php

Domain.php

namespace Validation
{
    use Phalcon\Validation\Validator as Validator;

    class Email extends Validator
    {
        public function validate($validator, $attribute)
        {
            $result = parent::validate($validator,$attribute);

            return $result;
        }
    }
}

Loader.php

$loader = new \Phalcon\Loader();

$loader->registerNamespaces(
    array(
        'Validation'  => __DIR__ . '/../validation/'
    )
);

$loader->register();

echo '<pre><br/>';
var_dump(new Validation\Email());
die();

并返回错误:

  

致命错误:未找到“验证\域\电子邮件”类

我做错了什么?

PS: 这里的一个例子http://docs.phalconphp.com/en/latest/reference/loader.html也不起作用。

// Creates the autoloader
$loader = new \Phalcon\Loader();

//Register some namespaces
$loader->registerNamespaces(
    array(
       "Example\Base"    => "vendor/example/base/",
       "Example\Adapter" => "vendor/example/adapter/",
       "Example"         => "vendor/example/",
    )
);

// register autoloader
$loader->register();

// The required class will automatically include the
// file vendor/example/adapter/Some.php
$some = new Example\Adapter\Some();

我创建了相同的结构并收到错误:

  

致命错误:类'示例\适配器\某些'未找到

1 个答案:

答案 0 :(得分:1)

Phalcon装载机有一些可疑的声誉。如果你使用composer,那么通过autoload指令使用它来自动加载你自己的代码通常会更有意义。

# composer.json
{

    "require": {
        "phpunit/dbunit": "*",
        "phpunit/phpunit": "*",
        "…": "…"
    },
    "autoload": {
        "psr-0": {
            "": "../src"
        }
    }
}

否则问题将出在路径上,请确保考虑子文件夹(配置位置,加载代码所在的位置等)。您似乎需要将'app/validation/'更改为'../../app/validation/' - 自己计算出来。如果使用__DIR__ . '../../app/validation/'进行作业,也请尝试设置绝对路径。

修改

在你的结构中,你说你有Domain.php但加载Domain\Email - 问题肯定在这里。我还在本地进行了测试,加载器工作时唯一的例子是提供绝对路径时(并且实际上你有app / validator / Domain / Email.php文件和类)。

$loader->registerNamespaces(
    array(
        'Validation'  => __DIR__ . '/../../app/validation/'
    )
);

关于作曲家自动加载器的建议保持不变。请注意您没有在命名空间中使用PSR-0标准(validator以较低的字母开头,Validator命名空间以大写字母开头),这并不酷...