Opencart: вызов метода с другого контроллера
Мне нужно позвонить в оформить заказ/подтвердить.TPL файл пользовательской функции, которую я сделал в controller/product.php
Как лучше всего это сделать?
Я пробовал это, но не работает:
$productController = $this->load->model('product/product');
$productController->customFunction();
5 ответов:
- MVC
- в архитектуре MVC шаблон служитисключительно для визуализации/отображения данных; он не должен (*) вызывать функции контроллера/моделии не должен выполнять SQL-запросы , как я видел во многихсторонних модулях (и даже вответах Здесь и сейчас).
$productController = $this->load->model('product/product');
- nifty eye должен обнаружить, что вы пытаетесь загрузить модель в переменную с именем контроллер и вы также пытаетесь использовать его таким образом. Ну, для вашей цели должен быть Метод
controller()
в классеLoader
- который не является (К счастью)- как это должно быть сделано?
- конечно, есть способ, как получить доступ к иливызвать функции контроллера из шаблонов. В MVC вызываемая функция, которая вызывается маршрутизацией, называетсяaction . Используя это предложение, я могу теперь сказать, что вы можете вызовите действие (функция контроллера) , обратившись к определенному URL.
Итак, предположим, что ваш контроллер является
CatalogProductController
, а метод, который вы хотите вызвать, являетсяcustom()
- в этом случае доступ к этому URLhttp://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();
В этом случае его хорошо называют продуктом / готовым