Comment étendre Zend View pour implémenter une fonction concrète?
-
03-07-2019 - |
Question
Je souhaite simplifier au maximum la localisation de chaînes de caractères dans les vues pour nos concepteurs. Par conséquent, je souhaite effectuer cette opération:
...
<p><?php echo $this->_("Hello, world!"); ?></p>
...
La notation de soulignement ici est nécessaire pour permettre à Poedit d’extraire automatiquement toutes les chaînes à des fins de localisation. La mise en œuvre est triviale:
public function _($string)
{
return Zend_Registry::get('Zend_Translate')->_($string);
}
Pour le moment, j'ai mis cela directement dans Zend_View_Abstract
, ce qui est mauvais (je ne veux pas le faire en modifiant l'une quelconque de la bibliothèque Zend). Idéalement, dans ce cas, j'étendrais Zend_View_Abstract
pour me permettre de mettre en œuvre d'autres fonctions concrètes dont nous avons besoin, mais je ne sais pas comment le configurer. Une alternative pourrait consister à implémenter View Helper, mais la seule façon pour moi de procéder consiste à rendre le code de la vue plus détaillé. Tous les indicateurs (non, pas ceux-là) seraient très appréciés. Merci!
La solution
Évidemment, ignorez mes chemins pour le vôtre ...
- Étendre
Zend_View
- Mettez votre méthode dans cette classe étendue
- Instanciez la classe (dans votre bootstrap par exemple)
- Attribuez-le à ViewRenderer
- Transmettez ce créateur de vue à
sur la méthode
addHelper de Zend_Controller_Action_HelperBroker - Utilisez-le dans votre vue
Dans / library / MegaHAL / Zend / create View.php:
class MegaHAL_Zend_View extends Zend_View
{
public function _($string)
{
return Zend_Registry::get('translate')->_($string);
}
}
Dans votre 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);
Selon vous:
<p><?php echo $this->_("Hello");?></p>
Je crois que cela fera ce que vous voulez, oui?
Autres conseils
Je pense que vous cherchez un moyen de créer aides à la vue personnalisées .
Exemple:
class My_View_Helper extends Zend_View_Helper_Abstract
{
public function translate($string)
{
//...
}
}
...
$view->setHelperPath('/path/to/helpers', 'My_View_Helper');
...
Ensuite, dans vos vues, vous pouvez l'utiliser:
echo $this->translate("Hello, World!");
Bien que je pense que l'utilisation des aides à la visualisation serait la "voie Zend-Framework" appropriée, vous pouvez étendre Zend_View
et implémenter toutes les méthodes supplémentaires de votre choix - ceci vous ne perdez pas les fonctionnalités de Zend_View
.
class My_View extends Zend_View
{
public function _($string)
{
return Zend_Registry::get('Zend_Translate')->_($string);
}
}
Vous devez ensuite uniquement vous assurer que votre nouvelle classe de vue est instanciée et enregistrée comme vue par défaut dans contrôleur (définition de la variable d'instance Zend_Controller_Action :: $ view
dans une instance de votre classe) et dans votre < a href = "http://framework.zend.com/manual/fr/zend.layout.options.html" rel = "nofollow noreferrer"> Zend_Layout
(lors de l'utilisation de layouts; passer votre vue en tant qu'option de configuration avec la touche view
) lorsque vous n'utilisez pas ViewRenderer
ou dans l'élément ViewRenderer
lors de l'utilisation de ViewRenderer
à l'aide de < code> Zend_Controller_Action_Helper_ViewRenderer :: setView () .
Si configuré correctement, Poedit peut extraire automatiquement les chaînes de fonctions autres que _ ().