phalcon Dynamic Class 创建失败并出现错误?
phalcon Dynamic Class creation fails with error?
我正在尝试使用用户模型中的模型函数创建动态模型 class,但是由于某种原因它无法识别 class 位置。它给我一个错误
Fatal error: Class 'VarEducation' not found
下面是函数
public function partner()
{
$view_service=new ViewService();
$partner_vars_check=$view_service->getUserVarPartnerModelCheckMappingArray();
foreach($partner_vars_check as $partner_key=>$partner_var){
$table= str_replace("p_","var_",$partner_key);
$sql = "SELECT * FROM ".$table."
WHERE id='" . $this->{$partner_key} . "'
ORDER BY id DESC";
$partner_obj = new $partner_var();
$this->{$partner_key} = new \Phalcon\Mvc\Model\Resultset\Simple(null, $partner_obj,
$partner_obj->getReadConnection()->query($sql));
}
}
知道是什么原因造成的吗?
查看服务提供的数据如下
public function getUserVarPartnerModelCheckMappingArray() {
return array(
'p_education' => 'VarEducation',
'p_body' => 'VarBody',
'p_ethnicity' => 'VarEthnicity',
'p_religion' => 'VarReligion',
'p_family' => 'VarFamily',
);
}
Phalcon 应该正确加载 classes,即使 class 名称是一个变量。尝试将问题隔离为:
$myClass='VarEducation';
$partner_obj = new $myClass();
同时尝试从您的模型列表中注释掉该特定模型,看看您的其他模型是否有效,也许在找到该特定模型时出现错误,但找不到其他模型。检查您的 /app/config/loader.php
文件并确保您正在注册您的模型目录。然后确保文件 VarEducation.php
存在于您的模型目录以及您的其他模型中。还要确保文件中的 class 名称与文件名匹配,并且您已将 class 命名为 VarEducation
。还要确保它没有命名空间。还要确保您没有忘记前导 <?php
并且文件没有任何错误。如果一切都失败了,你可以简单地从你的 loader.php 文件中加载 class,像这样:
$loader->registerClasses(array(
'VarEducation' => $config->application->modelsDir.'/VarEducation.php'
));
确保模型的简单测试有效:$x=new VarEducation();
我建议在 test
操作下从您的索引控制器执行此操作。如果 none 有效,请在尝试我的建议时用你的结果对此 post 发表评论,我会更新我的答案。
无论您做什么,如果模型隐藏在任何命名空间中,则必须使用映射数组提供完整的命名空间。比方说,你所有的模型都在 Application\Models
的命名空间中,你必须这样使用它:
public function getUserVarPartnerModelCheckMappingArray() {
return array(
'p_education' => '\Application\Models\VarEducation',
'p_body' => '\Application\Models\VarBody',
'p_ethnicity' => '\Application\Models\VarEthnicity',
'p_religion' => '\Application\Models\VarReligion',
'p_family' => '\Application\Models\VarFamily',
);
}
并不是说我宁愿 switch/case 放弃这么少的选项并直接使用模型,而不是手动构建 SQL。
我正在尝试使用用户模型中的模型函数创建动态模型 class,但是由于某种原因它无法识别 class 位置。它给我一个错误
Fatal error: Class 'VarEducation' not found
下面是函数
public function partner()
{
$view_service=new ViewService();
$partner_vars_check=$view_service->getUserVarPartnerModelCheckMappingArray();
foreach($partner_vars_check as $partner_key=>$partner_var){
$table= str_replace("p_","var_",$partner_key);
$sql = "SELECT * FROM ".$table."
WHERE id='" . $this->{$partner_key} . "'
ORDER BY id DESC";
$partner_obj = new $partner_var();
$this->{$partner_key} = new \Phalcon\Mvc\Model\Resultset\Simple(null, $partner_obj,
$partner_obj->getReadConnection()->query($sql));
}
}
知道是什么原因造成的吗?
查看服务提供的数据如下
public function getUserVarPartnerModelCheckMappingArray() {
return array(
'p_education' => 'VarEducation',
'p_body' => 'VarBody',
'p_ethnicity' => 'VarEthnicity',
'p_religion' => 'VarReligion',
'p_family' => 'VarFamily',
);
}
Phalcon 应该正确加载 classes,即使 class 名称是一个变量。尝试将问题隔离为:
$myClass='VarEducation';
$partner_obj = new $myClass();
同时尝试从您的模型列表中注释掉该特定模型,看看您的其他模型是否有效,也许在找到该特定模型时出现错误,但找不到其他模型。检查您的 /app/config/loader.php
文件并确保您正在注册您的模型目录。然后确保文件 VarEducation.php
存在于您的模型目录以及您的其他模型中。还要确保文件中的 class 名称与文件名匹配,并且您已将 class 命名为 VarEducation
。还要确保它没有命名空间。还要确保您没有忘记前导 <?php
并且文件没有任何错误。如果一切都失败了,你可以简单地从你的 loader.php 文件中加载 class,像这样:
$loader->registerClasses(array(
'VarEducation' => $config->application->modelsDir.'/VarEducation.php'
));
确保模型的简单测试有效:$x=new VarEducation();
我建议在 test
操作下从您的索引控制器执行此操作。如果 none 有效,请在尝试我的建议时用你的结果对此 post 发表评论,我会更新我的答案。
无论您做什么,如果模型隐藏在任何命名空间中,则必须使用映射数组提供完整的命名空间。比方说,你所有的模型都在 Application\Models
的命名空间中,你必须这样使用它:
public function getUserVarPartnerModelCheckMappingArray() {
return array(
'p_education' => '\Application\Models\VarEducation',
'p_body' => '\Application\Models\VarBody',
'p_ethnicity' => '\Application\Models\VarEthnicity',
'p_religion' => '\Application\Models\VarReligion',
'p_family' => '\Application\Models\VarFamily',
);
}
并不是说我宁愿 switch/case 放弃这么少的选项并直接使用模型,而不是手动构建 SQL。