Zend Viewを拡張して具象関数を実装するにはどうすればよいですか?
-
03-07-2019 - |
質問
ビューで文字列をローカライズするのをデザイナーができる限り簡単にしたいので、これを実行したいということです
...
<p><?php echo $this->_("Hello, world!"); ?></p>
...
ここで下線表記は、Poeditがローカライズのためにすべての文字列を自動的に抽出できるようにするために必要です。実装は簡単です:
public function _($string)
{
return Zend_Registry::get('Zend_Translate')->_($string);
}
現時点では、これを Zend_View_Abstract
に直接配置していますが、これは悪いことです(Zendライブラリを変更してこれを行いたくありません)。理想的には、 Zend_View_Abstract
を拡張して、必要な他の具体的な関数を実装できるようにしますが、これを設定する方法がわかりません。別の方法としてビューヘルパーを実装することもできますが、これを行う方法を知っている唯一の方法は、ビューのコードをより冗長にします。任意のポインター(いいえ、そういう種類ではありません)は大歓迎です。ありがとう!
解決
明らかに自分のパスを無視します...
-
Zend_View
を拡張 - この拡張クラスにメソッドを入れます
- クラスをインスタンス化します(たとえば、ブートストラップで)
- ViewRendererに割り当てる
- そのビューレンダラーを
Zend_Controller_Action_HelperBrokerの
addHelperメソッドに渡します - ビューで使用する
/ library / MegaHAL / Zend /でView.phpを作成:
class MegaHAL_Zend_View extends Zend_View
{
public function _($string)
{
return Zend_Registry::get('translate')->_($string);
}
}
ブートストラップで:
require_once APPLICATION_PATH.'../library/MegaHAL/Zend/View.php';
$view = new MegaHAL_Zend_View();
$viewRenderer = new Zend_Controller_Action_Helper_ViewRenderer();
$viewRenderer->setView($view);
Zend_Controller_Action_HelperBroker::addHelper($viewRenderer);
ビューで:
<p><?php echo $this->_("Hello");?></p>
それはあなたが望むことをするだろうと信じていますか?
他のヒント
例:
class My_View_Helper extends Zend_View_Helper_Abstract
{
public function translate($string)
{
//...
}
}
...
$view->setHelperPath('/path/to/helpers', 'My_View_Helper');
...
ビューで使用できます:
echo $this->translate("Hello, World!");
ビューヘルパーを使用することは正しい「Zend-Framework」だと思いますが、 Zend_View
を拡張し、必要なすべての追加メソッドを実装できます-これ Zend_View
の機能を失わない方法。
class My_View extends Zend_View
{
public function _($string)
{
return Zend_Registry::get('Zend_Translate')->_($string);
}
}
その後、新しいビュークラスがインスタンス化され、 controller ( Zend_Controller_Action :: $ view
インスタンス変数をクラスのインスタンスに設定)および< a href = "http://framework.zend.com/manual/en/zend.layout.options.html" rel = "nofollow noreferrer"> Zend_Layout
(レイアウトを使用する場合。 ViewRenderer
を使用していないとき、または ViewRenderer
を使用して ViewRenderer
を使用する場合、< code> Zend_Controller_Action_Helper_ViewRenderer :: setView()。
適切に設定されている場合、Poeditは_()以外の関数から文字列を自動的に抽出できます。