我的文件夹结构是:
/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();
我创建了相同的结构并收到错误:
致命错误:类'示例\适配器\某些'未找到
答案 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
命名空间以大写字母开头),这并不酷...