вызов неопределенной проблемы метода в drupal 8 - PullRequest
0 голосов
/ 22 января 2019

Я вставляю переменную с именем "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 У меня есть эта функция, которая должначтобы взять строку sql из предыдущей функции, completeCheck () и выполняет запрос 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 (& $ variable)) , который вызывает предыдущую функцию и должен извлекать информацию, которую я извлек из базы данных.Но это не так.Вот моя функция темы:

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, с mysql 5.0.12 с drupal 8.5.6

Я ожидаю, что out будет объектом с номером, но вместо этого я получаю ошибку:

На веб-сайте произошла непредвиденная ошибка.Пожалуйста, попробуйте позже.Ошибка: вызов неопределенного метода Drupal \ docebo_login \ FormaNotification :: completeCheck () в Drupal \ docebo_login \ FormaEntity-> getCCresult () (строка 106 модулей / custom / docebo_login / src / FormaEntity.php).

1 Ответ

0 голосов
/ 25 января 2019

Хорошо, у вас есть базовый класс и 2 подкласса:

  • abstract class FormaEntity> FormaRegis
  • abstract class FormaEntity> FormaNotification

При вызове getCreditResult() на new FormaNotification() происходит сбой, потому что первая строка в FormaEntity::getCCresult() вызывает метод, который не существует в этом абстрактном классе, и является completionCheck().Немного дальше, $noti->completionCheck(), также может произойти сбой по той же причине.

AFAICT из вашего кода, completionCheck() указан только в FormaRegis, что вызывает вашу проблему.Родительский класс и FormaNotification не имеют к нему доступа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...