2014-09-05 146 views
1

我想創建一個自定義基本路徑幫助器來替換原始zf2基本路徑視圖幫助器。如何使用自定義幫助器覆蓋本機zf2視圖幫助器

所以如果我打電話$this->basepath,它將使用我的自定義basepath而不是原來的。我不確定這是否可以完成。我希望我的自定義basepath擴展了原來的basepath類。

我已經找到了如何創建自定義的助手以及如何將它們在module.php註冊或module.config.php

一些答案,但我不能找到如何覆蓋原來的助手任何類似的問題!

回答

0
的基本路徑視圖助手的

廠定義聲明爲HelperPluginManager硬編碼invokableon line 45)但是這個定義還覆蓋在ViewHelperManagerFactory(line 80 to 93),因爲基本路徑視圖助手需要從服務定位的請求例如:

$plugins->setFactory('basepath', function() use ($serviceLocator) { 
    // ... 
}) 

我強烈建議延長,而不是試圖取代舊有不同的名稱(MyBasePath例如)內置的基本路徑幫手。重寫本機幫助程序可能會產生一些意想不到的麻煩(想想使用該幫助程序工作的第三方模塊)。

對於你的問題;對的,這是可能的。

創建Application\View\Helper\BasePath.php輔助類象下面這樣:

namespace Application\View\Helper; 

use Zend\View\Helper\BasePath as BaseBasePath; // This is not a typo 

/** 
* Custom basepath helper 
*/ 
class BasePath extends BaseBasePath 
{ 
    /** 
    * Returns site's base path, or file with base path prepended. 
    */ 
    public function __invoke($file = null) 
    { 
     var_dump('This is custom helper'); 
    } 
} 

而且在onBootstrap覆蓋出廠()的Module.php的方法文件象下面這樣:

namespace Application; 

use Zend\Mvc\MvcEvent; 
use Application\View\Helper\BasePath; // Your basepath helper. 
use Zend\View\HelperPluginManager; 

class Module 
{ 
    /** 
    * On bootstrap for application module. 
    * 
    * @param MvcEvent $event 
    * @return void 
    */ 
    public function onBootstrap(MvcEvent $event) 
    { 
     $services = $event->getApplication()->getServiceManager(); 

     // The magic happens here 
     $services->get('ViewHelperManager')->setFactory('basepath', function (HelperPluginManager $manager) { 
      $helper = new BasePath(); 
      // Here you can do whatever you want with the instance before returning 
      return $helper; 
     }); 
    } 
} 

現在你可以試着在任何看法是這樣的:

echo $this->basePath('Bar'); 

這不是一個完美的解決方案,但它應ld工作。