Drupal: «Ошибка: класс не найден» при вызове функции из контроллера в submitForm () - PullRequest
0 голосов
/ 23 декабря 2019

Я пытаюсь что-то сделать при отправке формы в пользовательский модуль. Часть этого достигается путем вызова функции из контроллера. Вот когда я получаю:

Error: Class 'Drupal\ice_cream\Controller\OrderController' not found in Drupal\ice_cream\Form\OrderForm->submitForm() (line 77 of modules\custom\ice_cream\src\Form\OrderForm.php).

Насколько я могу сказать, пространства имен не ошибаются? Или это не связано с этой ошибкой?

Вот так выглядят мои OrderForm.php и submitForm ():

<?php

namespace Drupal\ice_cream\Form;

use Drupal\Core\Form\FormBase;
use Drupal\Core\Form\FormStateInterface;
use Drupal\ice_cream\Controller\OrderController;

/**
 * Implements the order form.
 */
class OrderForm extends FormBase {

... (omitted code for getFormid and buildForm)

    public function submitForm(array &$form, FormStateInterface $form_state) {

        //Check if the order is ice or waffles.   
        if($form_state->getValue('foodType') == 'ice'){
          //Save order to the DB.
          OrderController::saveOrder($form_state->getValue('foodType'), $form_state->getValue('taste'));

          ... (more code)
        }

    }
}

Вот так выглядит контроллер:

<?php

namespace Drupal\ice_cream\Controller;

use Drupal\Core\Controller\ControllerBase;
use Drupal\Core\Database\Database;

/**
 * Order controller for interacting (insert, select,...) with the ice cream table in the DB.
 */
class OrderController extends ControllerBase {

  /**
   * Saves an order for either Ice or Waffles with their options (tast or toppings).
   */
  public function saveOrder($foodType, $options) {

    $connection = Database::getConnection();

    //Check if ice or waffles (to only insert the right field with $options).
    if($foodType == "ice"){
        $result = $connection->insert('ice_cream')
        ->fields([
            'foodType' => $foodType,
            'taste' => $options,
            'toppings' => "",
        ])
        ->execute();
        return true;

    }elseif($foodType == "waffles"){
        $result = $connection->insert('ice_cream')
        ->fields([
            'foodType' => $foodType,
            'taste' => "",
            'toppings' => $options,
        ])
        ->execute();
        return true;

    }

  }

}

Ответы [ 2 ]

0 голосов
/ 24 декабря 2019

Решено:

Только что решил это с моим наставником. Код был более или менее правильным, но все равно нужно было сделать мои функции статичными в OrderController, а также я сделал глупую ошибку, забыв о расширении .php в своем имени файла, когда создавал его с помощью команды терминала «touch» ...

0 голосов
/ 24 декабря 2019

Попробуйте использовать следующий код:

$obj= new OrderController;
$obj->saveOrder($form_state->getValue('foodType'), $form_state->getValue('taste'));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...