Несоответствие помощника действия начальной загрузки Zend

#php #zend-framework

#php #zend-framework

Вопрос:

У меня есть следующий код в bootstrap.php

     Zend_Controller_Action_HelperBroker::addPath(
        APPLICATION_PATH . '/controllers/actions/helpers',
        'Default_Controller_Action_Helper'
    );
  

И помощники действий в этом каталоге имеют префикс: Default_Controller_Action_Helper_

Мой вопрос: почему все работает одинаково, когда я добавляю символ подчеркивания в конце префикса Default_Controller_Action_Helper в bootstrap.php ? Ничего не меняется с подчеркиванием или без подчеркивания в конце префикса в bootstrap.php

Этот код работает так же, как и приведенный выше, без каких-либо изменений:

     Zend_Controller_Action_HelperBroker::addPath(
        APPLICATION_PATH . '/controllers/actions/helpers',
        'Default_Controller_Action_Helper_'
    );
  

Какие-либо известные объяснения такого поведения вообще?

Ответ №1:

Если вы проработаете свой путь через код, начиная с Zend/Controller/Action/HelperBroker.php и посмотрите на addpath(), который в конечном итоге приведет вас к Zend/Loader/PluginLoader.php и _formatPrefix().

Вы увидите, что последняя строка этой функции есть return rtrim($prefix, '_') . '_'; , поэтому ваш символ ‘_’ удаляется, если он есть, а затем добавляется снова, чтобы иметь дело со случаями, когда он опущен, отсюда и поведение, которое вы видите.

Чтобы по-настоящему изучить ZF, вам нужно разобраться в коде и понять, что происходит на самом деле.

Ответ №2:

 $x = rtrim($x, '_') . '_';
  

Это распространенный способ нормализации параметров. Другой пример

 $x = substr($x, -1) == '_' ? substr($x, 0, -1) : $x;
  

Вероятно, существует гораздо больше способов нормализовать значения