Opencart: вызов метода с другого контроллера


Мне нужно позвонить в оформить заказ/подтвердить.TPL файл пользовательской функции, которую я сделал в controller/product.php

Как лучше всего это сделать?

Я пробовал это, но не работает:

$productController = $this->load->model('product/product');
$productController->customFunction();
5 3

5 ответов:

  1. MVC
    • в архитектуре MVC шаблон служитисключительно для визуализации/отображения данных; он не должен (*) вызывать функции контроллера/моделии не должен выполнять SQL-запросы , как я видел во многихсторонних модулях (и даже вответах Здесь и сейчас).
  2. $productController = $this->load->model('product/product');
    • nifty eye должен обнаружить, что вы пытаетесь загрузить модель в переменную с именем контроллер и вы также пытаетесь использовать его таким образом. Ну, для вашей цели должен быть Метод controller() в классе Loader - который не является (К счастью)
  3. как это должно быть сделано?
    • конечно, есть способ, как получить доступ к иливызвать функции контроллера из шаблонов. В MVC вызываемая функция, которая вызывается маршрутизацией, называетсяaction . Используя это предложение, я могу теперь сказать, что вы можете вызовите действие (функция контроллера) , обратившись к определенному URL.

Итак, предположим, что ваш контроллер является CatalogProductController, а метод, который вы хотите вызвать, является custom() - в этом случае доступ к этому URL

http://yourstore.com/index.php?route=catalog/product/custom

Вы убедитесь, что метод custom() CatalogProductController вызван/доступен.

Вы можете получить доступ к такому URL многими способами - как запрос cURL, как Ссылкаhref или через AJAX-запрос, чтобы назвать некоторые. В области PHP даже file_get_contents() или аналогично подход сработает.

(*) под не следует я имею в виду, что это ( к сожалению) возможно в OpenCart, но такое злоупотребление противоречит архитектуре MVC.

Да, наконец-то я нашел правильный ответ!!! извините за последний плохой ответ

class ControllerCommonHome extends Controller {
    public function index() {
        return $this->load->controller('product/ready');
    }
}

Может быть что-то вроде этого может помочь вам (или любому, кто заинтересован)

// Load seo pro
require_once(DIR_CATALOG."/controller/common/seo_pro.php"); // load file
$seoPro = new ControllerCommonSeoPro($this->registry); // pass registry to constructor

$url = HTTP_CATALOG . $seoPro->rewrite(
 $this->url('information/information&information_id=' . $result['information_id'])
);

Он и какие это плохие ответы!!

В laravel его так просто написать Controller:: call ('ApplesController@getSomething');

Но там я не могу сделать лучше, чем это

$config = new Config();
// Response
$response = new Response();
$response->addHeader('Content-Type: text/html; charset=utf-8');
$response->setCompression($config->get('config_compression'));
$this->registry->set('response', $response);


$action = new Action('product/ready');
$controller = new Front($this->registry);
$controller->addPreAction(new Action('common/maintenance'));
$controller->addPreAction(new Action('common/seo_url'));
$controller->dispatch($action, new Action('error/not_found'));
$response->output();

В этом случае его хорошо называют продуктом / готовым

$this->load->controller('sale/box',$yourData);

Вызвать ShipmentDate() функцию контроллера коробки

$this->load->controller('sale/box/ShipmentDate',$yourData);