Помощник просмотра zf2 по всему модулю

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

Класс «Приложение \ Вид \ Помощник \ Нижний колонтитул» не найден

Я пытался поместить этот код в module.config.php, а также модуль приложения даже в том же файле пользовательского модуля.

'view_helpers' => array (
    'invokables' => array (
    'footertable' => 'Application\View\Helper\Footertable' 
    ) 
), 

Я думаю, что это проблема с автозагрузкой класса, но я не могу найти информацию о том, как загрузить этот помощник, когда вы находитесь в другом модуле.

Я вызываю помощника в файле просмотра, используя

$this->footertable()

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

Есть идеи?

Здравствуйте, но мой код правильный

<?php

namespace Application\View\Helper;

use Zend\View\Helper\AbstractHelper;

class Footertable extends AbstractHelper{
    protected  $inizioFine;
    protected  $numero;

    public function __invoke($inizioFine,$numero){
        $this->inizioFine = $inizioFine;
        $this->numero = $numero;
        echo  sprintf('Mostra %d a %d di %d record',$this->inizioFine['start'],$this->inizioFine['end'],$this->numero);
    }
}

пробел в конфиге - это копии и прошлые ошибки. У меня все та же проблема: не могу загрузить хелпер из другого модуля

обновить полную ошибку

Fatal error: Class 'Application\View\Helper\Footertable' not found in D:\www\httpdocs\test\vendor\zendframework\zendframework\library\Zend\ServiceManager\AbstractPluginManager.php on line 170

путь

D:\www\httpdocs\test\module\Application\src\View\Helper\Footertable.php

person ciro    schedule 23.06.2014    source источник
comment
Почему у вас есть пробелы по обе стороны от обратной косой черты?   -  person Tim Fountain    schedule 23.06.2014
comment
простая копия и прошлые ошибки   -  person ciro    schedule 24.06.2014
comment
ни у кого нет решения?   -  person ciro    schedule 26.06.2014
comment
Вызываемый нижний колонтитул должен быть только в модуле приложения module.config.php. Если это все еще не работает, можете ли вы отредактировать свой вопрос, чтобы включить полную ошибку, которую вы получаете?   -  person Tim Fountain    schedule 26.06.2014
comment
Привет, Тим, та же ошибка Неустранимая ошибка: класс 'Application\View\Helper\Footertable' не найден в, я сообщаю об ошибке   -  person ciro    schedule 26.06.2014
comment
Ну, проблема, похоже, не в чем-то, что вы опубликовали до сих пор. Каков полный путь к вспомогательному файлу (включая имя файла)?   -  person Tim Fountain    schedule 26.06.2014
comment
хорошо, Тим, я обновил вопрос тем, что ты мне задал   -  person ciro    schedule 27.06.2014


Ответы (2)


Путь, который вы указали, не выглядит правильным. Все файлы в src для вашего модуля приложения должны находиться в папке с именем Application, так как это ваше пространство имен верхнего уровня. Итак, путь должен быть:

D:\www\httpdocs\test\module\Application\src\Application\View\Helper\Footertable.php

Это объясняет, почему помощник не может быть загружен автоматически, но я не понимаю, как это работает в модуле приложения, если это так.

person Tim Fountain    schedule 26.06.2014
comment
Спасибо, это работает. Я отметил ваш ответ как правильный. не могу проголосовать :( - person ciro; 27.06.2014

Ваша конфигурация кажется хорошей. Вероятно, проблема в подписи вашего вспомогательного класса.

Поскольку PhpRenderer составляет HelperPluginManager для управления помощниками, ваш помощник должен реализовать < href="https://github.com/zendframework/zf2/blob/master/library/Zend/View/Helper/HelperInterface.php" rel="nofollow">HelperInterface (1) для правильной регистрации . Также вы должны написать метод __invoke() в вашем помощнике, чтобы вызывать его вызовом метода. (2)

Итак, в вашем классе Footertable просто расширьте AbstractHelper и убедитесь, что у вас есть метод _invoke(). Это рекомендуемый способ написания собственных помощников представления в документации. .

Например:

<?php

namespace Application\View\Helper;

use Zend\View\Helper\AbstractHelper;

class Footertable extends AbstractHelper
{
    public function __invoke()
    {
        return 'bar';
    }
}

И используйте его в своих представлениях следующим образом:

echo $this->footertable();

Он должен работать.

Примечание. Вы также должны зарегистрировать все помощники (и другие классы) в разделе вызываемых модулей конфигурации вашего модуля без пробелов между обратными косыми чертами:

Неверно:

'footertable' => 'Application \ View \ Helper \ Footertable' 

Правильно:

'footertable' => 'Application\View\Helper\Footertable'
person edigu    schedule 23.06.2014
comment
этот ответ мне не помог - person ciro; 24.06.2014
comment
ciro, вы пытаетесь напрямую повторить вывод в своем помощнике. это не правильный подход. просто верните вывод помощника и распечатайте его в своем представлении. - person edigu; 24.06.2014
comment
я меняю таким образом return sprintf('Mostra %d a %d di %d record',$this->inizioFine['start'],$this->inizioFine['end'],$this->numero); но ничего не меняется класс не загружается - person ciro; 24.06.2014