我正在将一个名为“ creditCheck”的变量插入一个名为 node--course.html.twig
的树枝模板中我从一个名为 FormaRegis 的类开始,该类消除了一个名为 FormaEntity
的抽象类这是功能:
namespace Drupal\docebo_login;
use Drupal\docebo_login\FormaEntity;
class FormaRegis extends FormaEntity {
.
.
.
public function completionCheck() {
$check = false;
if (parent::accessCheck()) {
$sql = "SELECT count(*) as count FROM learning_courseuser
WHERE DATE_FORMAT(CURDATE(),'%d/%m/%Y') = DATE_FORMAT(date_complete,'%d/%m/%Y')
AND idUser = " . $_SESSION['public_area_idst'];
return $sql;
}
else {
return "";
}
}
在抽象类 FormaEntity 中,我有这个函数,应该从上一个函数 completionCheck()中获取sql字符串,并执行mysql查询并返回和对象。这是函数:
namespace Drupal\docebo_login;
use Drupal\Core\Access\AccessResult;
abstract class FormaEntity {
.
.
.
public function getCCresult() {
if ($this->completionCheck() == "") {
\Drupal\Core\Database\Database::setActiveConnection();
return false;
}
$result = $this->connection->query($this->completionCheck())->fetch();
\Drupal\Core\Database\Database::setActiveConnection();
if ($result > 5 ) {
$check = "fail";
}
else {
$check = "pass";
}
return $check;
}
在另一个名为 FormaNotification 的类中,该类还扩展了 FormaEntity 写入函数,该函数将能够从抽象类中调用函数 getCCresult() FormaEntity 这是功能:
namespace Drupal\docebo_login;
use Drupal\docebo_login\FormaEntity;
class FormaNotification extends FormaEntity {
.
.
.
public function getCreditResult() {
return parent::getCCresult();
}
最后,在我的.theme文件中,我编写了一个名为 txhs_preprocess_node__course(&$ variables)的函数,该函数调用了先前的函数,并应该从数据库中检索我获取的信息。但事实并非如此。这是我的主题功能:
use Drupal\docebo_login\FormaNotification;
use Drupal\docebo_login\FormaMyCourse;
use Drupal\docebo_login\FormaRegis;
use Drupal\Core\Url;
.
.
.
function txhs_preprocess_node__course(&$variables) {
$noti = new FormaNotification();
var_dump($noti->getCreditResult());
exit;
if ($noti->completionCheck() == "fail") {
$check = "fail";
}
else {
$check = "pass";
}
// $variables['creditCheck'] = "HI";
}
我尝试了很多操作,例如重命名功能,在主题文件中移动功能...但是我真的不知道自己在做什么错。
我正在运行php 7.2.11,带有drupal 8.5.6的mysql 5.0.12
我希望out是一个带有数字的对象,但是却出现错误:
网站遇到意外错误。请稍后再试。 错误:调用Drupal \ docebo_login \ FormaEntity-> getCCresult()中未定义的方法Drupal \ docebo_login \ FormaNotification :: completionCheck()(模块/custom/docebo_login/src/FormaEntity.php的第106行)。
答案 0 :(得分:0)
好,所以您有一个基类和2个子类:
abstract class FormaEntity
> FormaRegis
abstract class FormaEntity
> FormaNotification
在getCreditResult()
上调用new FormaNotification()
时失败,因为FormaEntity::getCCresult()
中的第一行正在调用该抽象类中不存在的方法,即completionCheck()
。再往下走$noti->completionCheck()
,由于相同的原因也会失败。
根据您的代码的AFAICT,completionCheck()
仅在FormaRegis
中指定,这导致了您的问题。父类和FormaNotification
都没有访问权限。