zend-frameworkzend-framework2zend-view

where is the basepath variable being set for the zend basePath view helper (maybe a factory)


Id like to see how the base path view helper sets up the base path variable inside the helper class.

This is an internal based questions, as I imagine its being done with a factory behind the scenes.

I needed to replicate it with a custom version but im hardcoding the base path currently: 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 rather use a factory but I dont know how to access the base path set logic WHICH SETS UP THE FACTORY BASE PATH FOR THE base path view helper to setup the custom base path correctly

How is it possible for me to see the factory creation of the base path view helper is my base question


Solution

  • I seem to have found where the basepath is set, here 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;
            };
        }
    

    I hope this helps