我想創建一個自定義基本路徑幫助器來替換原始zf2基本路徑視圖幫助器。如何使用自定義幫助器覆蓋本機zf2視圖幫助器
所以如果我打電話$this->basepath
,它將使用我的自定義basepath而不是原來的。我不確定這是否可以完成。我希望我的自定義basepath擴展了原來的basepath類。
我已經找到了如何創建自定義的助手以及如何將它們在module.php註冊或module.config.php
一些答案,但我不能找到如何覆蓋原來的助手任何類似的問題!
我想創建一個自定義基本路徑幫助器來替換原始zf2基本路徑視圖幫助器。如何使用自定義幫助器覆蓋本機zf2視圖幫助器
所以如果我打電話$this->basepath
,它將使用我的自定義basepath而不是原來的。我不確定這是否可以完成。我希望我的自定義basepath擴展了原來的basepath類。
我已經找到了如何創建自定義的助手以及如何將它們在module.php註冊或module.config.php
一些答案,但我不能找到如何覆蓋原來的助手任何類似的問題!
廠定義聲明爲HelperPluginManager硬編碼invokable
(on 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工作。