Wie erweitere ich Zend Ansicht eine konkrete Funktion zu implementieren?
-
03-07-2019 - |
Frage
Ich mag es so einfach wie möglich machen für unsere Designer Strings in Ansichten zu lokalisieren, was bedeutet, dass ich mag, dies zu tun:
...
<p><?php echo $this->_("Hello, world!"); ?></p>
...
Der Unterstrich-Schreibweise ist hier notwendig Poedit, damit automatisch alle Zeichenfolgen für die Lokalisierung extrahieren. Die Implementierung ist trivial:
public function _($string)
{
return Zend_Registry::get('Zend_Translate')->_($string);
}
Im Moment habe ich diese direkt in Zend_View_Abstract
setzen, was schlecht ist (ich will nicht, dies zu tun durch eine der Zend-Bibliothek zu ändern). Idealerweise dann würde ich verlängern Zend_View_Abstract
mir zu erlauben, andere konkrete Funktionen zu implementieren, die wir benötigen, aber ich weiß nicht, wie dies einzurichten. Eine Alternative könnte sein, einen View Helfer zu implementieren, aber der einzige Weg, ich weiß, wie dies der Code in der Ansicht ausführlicher macht zu tun. Alle Zeiger (nein, nicht jene Art) würde sehr geschätzt werden. Dank!
Lösung
Offensichtlich meine Pfade für Ihre eigenen ignorieren ...
- Extend
Zend_View
- Legen Sie Ihre Methode in dieser erweiterten Klasse
- Instanziieren der Klasse (in der Bootstrap zum Beispiel)
- Weisen Sie auf die Viewrenderer
- übergibt, den Viewrenderer addHelper Methode
Zend_Controller_Action_HelperBroker's
- Verwenden Sie es in der Ansicht
/ library / MegaHAL / Zend / erstellen view.php:
class MegaHAL_Zend_View extends Zend_View
{
public function _($string)
{
return Zend_Registry::get('translate')->_($string);
}
}
In der Bootstrap:
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);
In Ihrer Ansicht:
<p><?php echo $this->_("Hello");?></p>
Ich glaube, dass das tun, was Sie wollen, nicht wahr?
Andere Tipps
Ich denke, dass Sie nach einer Möglichkeit, sich auf eine href zu erstellen <= „http://framework.zend.com/manual/en/zend.view.helpers.html#zend.view.helpers.custom“ rel = "nofollow noreferrer"> benutzerdefinierte Ansicht Helfer .
Beispiel:
class My_View_Helper extends Zend_View_Helper_Abstract
{
public function translate($string)
{
//...
}
}
...
$view->setHelperPath('/path/to/helpers', 'My_View_Helper');
...
Dann in Ihren Ansichten können Sie es verwenden:
echo $this->translate("Hello, World!");
Obwohl ich glaube, dass View Helfer verwenden wäre der richtige „Zend-Framework“ -Wege, dies zu tun, Sie Zend_View
erweitern können und implementieren alle weiteren Methoden, die Sie würde gerne haben - diese Weise können Sie nicht verlieren die Eigenschaften von Zend_View
.
class My_View extends Zend_View
{
public function _($string)
{
return Zend_Registry::get('Zend_Translate')->_($string);
}
}
Sie müssen dann nur sicherstellen, dass Ihre neue Ansicht Klasse instanziiert wird und als Standardansicht in der Controller (Einstellung der Zend_Controller_Action::$view
Instanzvariable auf eine Instanz der Klasse) und in der Zend_Layout
(wenn Layouts, Ihre Ansicht nach als Konfigurationsoption mit Schlüsseln view
vorbei), wenn nicht den ViewRenderer
mit oder in der ViewRenderer
bei der Verwendung von die ViewRenderer
mit Zend_Controller_Action_Helper_ViewRenderer::setView()
.
konfiguriert Wenn richtig Poedit automatisch Strings aus Funktionen extrahiert andere als _ ().