Zend Framework: вызов функции из другого файла - PullRequest
0 голосов
/ 15 октября 2011

** Edit2: Core.php не был найден, поскольку Bootstrap.php требуется Core.php включен require_once 'C: \ wamp \ www \ PhpProject1 \ application \ Core \ Core.php'; Решил мою проблему **


Я использую Zendframework, и я создал новую папку с файлом Core / Core.php для своих функций, которые я буду использовать в своих контроллерах и в других местах. Но когда я пытаюсь протестировать функцию в моем Core.php, ничего не появляется. Я думаю, что я вызываю core.php неправильно, но я не уверен, что это за ошибка.

приложение / контроллеры /

IndexController.php

class IndexController extends Zend_Controller_Action
{

     public function init()
    {
         $this->tournamentAction();
    }

   public function indexAction(){          

   }

    public function tournamentAction()
  {            
        $bleh = new Core();
        $this->view->ha = $bleh->yo();
        $this->renderScript('tournament/index.phtml');            
    }    
}

приложение / ядро ​​/

core.php

class Core{

    public function init(){

    }

    public function indexAction(){

    }
    public function yo(){
        $text = 'This is my function Yo';
        return $text;
    }

приложение / просмотров / скрипты / турнир / index.phtml

$this->ha;
echo "hello";

Редактировать: Сообщение об ошибке - это хорошо, ха! Это ошибка, которую я получаю.

 ! ) Fatal error: Class 'Core' not found in C:\wamp\www\PhpProject1\application\controllers\IndexController.php on line 19
Call Stack
#   Time    Memory  Function    Location
1   0.0006  678944  {main}( )   ..\index.php:0
2   0.0275  3090632 Zend_Application->run( )    ..\index.php:26
3   0.0275  3090632 Zend_Application_Bootstrap_Bootstrap->run( )    ..\Application.php:366
4   0.0275  3090728 Zend_Controller_Front->dispatch( )  ..\Bootstrap.php:97
5   0.0446  4801056 Zend_Controller_Dispatcher_Standard->dispatch( )    ..\Front.php:954
6   0.0456  4823424 Zend_Controller_Action->__construct( )  ..\Standard.php:268
7   0.0547  5211576 IndexController->init( )    ..\Action.php:133
8   0.0547  5211576 IndexController->tournamentAction( )    ..\IndexController.php:8

Ответы [ 2 ]

1 голос
/ 18 октября 2011

Ваша проблема в том, что автозагрузчик не может найти ваш класс Core.

Обычно я структурирую свое приложение, используя папку библиотеки, в которой заканчиваются все мои модели и инструменты.

В вашем случае, Я бы создал в папке библиотеки папку MyProject, внутри которой вы можете поместить свой класс Core.php, и вам придется исправить его имя, которое приводит к:

library / MyProject / Core.php

class MyProject_Core{

public function init(){

}

public function indexAction(){

}
public function yo(){
    $text = 'This is my function Yo';
    return $text;
}

Конечно, вы бы назвали свой класс следующим образом:

$coreInstance = new MyProject_Core();

Поместите эту функцию в свое приложение / Bootstrap.php:

protected function _initAutoload()
{
    $autoloader = Zend_Loader_Autoloader::getInstance();
    $autoloader->registerNamespace('MyProject_');
    $autoloader = new Zend_Application_Module_Autoloader(array(
            'namespace' => '',
            'basePath' => APPLICATION_PATH));
    return $autoloader;
}

Тогда Zend_Loader должен найти ваш класс без каких-либо проблем.

0 голосов
/ 15 октября 2011

В вашем view вы делаете:

$this->ha; // this doesn't do anything without an echo / print

Также вы сказали:

Я думаю, что неправильно вызываю core.php, но я не уверен, что это за ошибка.

Если это так, вам следует включить отчеты об ошибках.

Добавьте это в начало вашего файла начальной загрузки:

error_reporting(E_ALL | E_STRICT);
ini_set("display_errors", 1);
...