2017-01-07 11 views
0

Id нравится видеть, как base path view helper устанавливает переменную базового пути внутри класса-помощника.где задана переменная базового маршрута для помощника вида zend basePath (возможно, фабрика)

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

мне нужно было скопировать его с пользовательской версией, но им жестко прописывать базовый путь в настоящее время: You'll see that even though its extending the basepath viewhelper i cannot configure the basepath variable without this current solution of hardcoding it

class PlutoBasePath extends \Zend\View\Helper\BasePath 
{ 

public function __construct() 
{ 
    /** 
    * @todo 
    * @var Ambiguous $basePath 
    */ 
    $this->basePath = Pluto::registry('prepend_location_url'); 
} 

public function __invoke($file = null) 
{ 
     if (null === $this->basePath) { 
      throw new Exception\RuntimeException('No base path provided'); 
     } 

     if (null !== $file) {   
      \Pluto\Stdlib\FilesystemUtils::sanitizeFilePaths($file); 
      \Pluto\Stdlib\FilesystemUtils::trimLeadingPath($file);     
     }      
     return $this->basePath.$file; 
} 
} 

Id лучше использовать фабрику, но я не знаю, как получить доступ к основному пути набора логики который устанавливает ФАБРИКА бАЗА пУТЬ дЛЯ базового пути помощникаto setup the custom base path correctly

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

ответ

0

Я, кажется, нашел, где BasePath является комплект, здесь Zend\Mvc\Service\ViewHelperManagerFactory::createBasePathHelperFactory().

private function createBasePathHelperFactory(ContainerInterface $services) 
    { 
     return function() use ($services) { 
      $config = $services->has('config') ? $services->get('config') : []; 
      $helper = new ViewHelper\BasePath; 

      if (Console::isConsole() 
       && isset($config['view_manager']['base_path_console']) 
      ) { 
       $helper->setBasePath($config['view_manager']['base_path_console']); 
       return $helper; 
      } 

      if (isset($config['view_manager']) && isset($config['view_manager']['base_path'])) { 
       $helper->setBasePath($config['view_manager']['base_path']); 
       return $helper; 
      } 

      $request = $services->get('Request'); 

      if (is_callable([$request, 'getBasePath'])) { 
       $helper->setBasePath($request->getBasePath()); 
      } 

      return $helper; 
     }; 
    } 

Я надеюсь, что это помогает

0

Вот кусок кода, который я использую в моем приложении, и которые должны ответить на ваш вопрос (адаптируются в соответствии со схемой вашего проекта)

use Zend\View\Renderer\PhpRenderer; 
    use Zend\View\Resolver; 
    ... 
    $stack = new Resolver\TemplatePathStack(
     [ 
      'script_paths' => [ 
       __DIR__ . '/../../../view' 
      ] 
     ]); 
    $resolver = new Resolver\AggregateResolver(); 
    $resolver->attach($stack); 
    $renderer = new PhpRenderer(); 
    $renderer->setResolver($resolver) 
     ->plugin('basePath') 
     ->setBasePath('/'); 

 Смежные вопросы

  • Нет связанных вопросов^_^