Как использовать вспомогательную функцию в контроллере? - PullRequest
8 голосов
/ 23 июня 2011

Я написал некоторую функцию в файле app_helper. Теперь мне нужно вызвать эту функцию в моем контроллере как я могу сделать это в CAKEPHP

Ответы [ 7 ]

19 голосов
/ 23 июня 2011

Вы не можете. *

Если ваши функции настолько универсальны, что их можно использовать вне представлений, создайте их в bootstrap.php или создайте пользовательскую библиотеку / класс в каталоге libs/.


* Вы можете загрузить что угодно в любом месте, используя App::import('Helper', 'NameOfHelper') или ClassRegistry::init, но вы действительно не должны. Смысл разделения MVC в том, чтобы ваше приложение было хорошо организовано.

16 голосов
/ 14 марта 2013
App::uses('HtmlHelper', 'View/Helper');
$yourTmpHtmlHelper = new HtmlHelper(new View());

Наконец-то версия, которая работает с Cakephp 2.3

5 голосов
/ 20 февраля 2015

Вы можете использовать помощника в Controller, как показано ниже

App::uses('YourHelper', 'View/Helper');

class yourController extends AppController {

public function index(){
    $yourHelper = new YourHelper(new View());
    $yourHelper->yourMethod();
  }

}
5 голосов
/ 13 сентября 2013
App::import('Helper', 'Forum.Common');
    $commonHelper = new CommonHelper(new View())
2 голосов
/ 25 сентября 2013

Если вы хотите использовать некоторые общие функции во всех ваших контроллерах, как это делает помощник для представлений, вы должны использовать Компоненты http://book.cakephp.org/2.0/en/controllers/components.html

вместо использования App :: import ('Helper', 'NameOfHelper'), это поддерживает правильный стандарт MVC и ваше приложение хорошо организовано.

1 голос
/ 06 февраля 2017

Вы можете вызвать вспомогательную функцию таким образом.предположим, что ваш помощник DemoHelp и вызов вспомогательной функции call_function () , тогда вы можете использовать это.

App::import('Helper', 'DemoHelp');
$DemoHelp = new DemoHelpHelper();

$DemoHelp->call_function()
0 голосов
/ 23 февраля 2017

Вы можете использовать Компонент , они хранятся в Controller/Component/

Например, если у вас есть Controller/Component/SomeComponent.php и хотите вызвать его на лету одним действием внутри контроллера:

$this->SomeComponent = $this->Components->load('SomeComponent');
$this->SomeComponent->someFunction();
...