Ho creato un helper di visualizzazione ZF2 PageTitle
(estendendo Zend\View\Helper\AbstractHelper
). Come suggerisce il nome dell'helper, è responsabile del rendering del titolo della pagina per ogni script della vista di azione.
Quindi all'interno di ogni script di visualizzazione azioni (non layout) chiamerei:
echo $this->pageTitle('My Page Title', 'some-icon-class-name');
Ciò renderebbe l'output HTML richiesto
<div class="page-title">
<h1><span class="some-icon-class-name"></span> My Page Title</h1>
</div>
Il plugin contiene anche un altro helper di visualizzazione ( button
) al suo interno; il suo compito è di rendere zero o più elementi del pulsante di forma.
I miei problemi arrivano quando ho bisogno di passare questi pulsanti / collegamenti specifici per la pagina . La mia soluzione attuale è di fornire una serie di "pulsanti" come terzo parametro.
$this->pageTitle('My Page Title', 'some-icon-class-name', array(
'button label 1' => array(
'attributes' => array(
'class' => array('some-class-name', 'another-class'),
'data-foo' => 'bar',
),
)));
(Sopra è solo un esempio di ciò che ho provato a dimostrare il problema. Si tratta in effetti di numerosi pulsanti, ciascuno con diversi "attributi" ciascuno)
Penso che l'approccio di cui sopra sia disordinato, certamente all'interno della vista. Sconfigge anche lo scopo di avere anche un helper di visualizzazione poiché dovrò fornire nuovamente questa configurazione ogni volta che ho bisogno di riutilizzare l'intestazione della pagina (alcune pagine potrebbero usare altre viste come bambini).
Alcune soluzioni che ho considerato.
Crea una fabbrica di servizi per i titoli di pagina, per pagina
Ogni factory crea un nuovo plug-in PageTitle
e inserisce la configurazione 'button' in esso. Questo è quindi registrato per il gestore di plugin di visualizzazione con un nome di plugin univoco.
Quindi, ad esempio, cambierei la chiamata nella mia vista per:
echo $this->mySpecificPageTitle(); // no args as pre-constructed
Il rovescio della medaglia qui è che quindi ho bisogno di creare un lotto di fabbriche (solo così posso fornire argomenti leggermente diversi).
Fornito un nome di "servizio" per il plug-in
(questo è simile all'help della visualizzazione di navigazione), quindi l'helper chiama questo servizio e restituisce la configurazione richiesta.
Ad esempio:
echo $this->pageTitle('My Page Title', 'some-icon-class-name', 'MyButtonService');
Quindi all'interno dell'helper:
$buttonConfig = $serviceManager->get('MyButtonService');
Ciò significa che dovrei creare una factory per ogni "MyButtonService" di cui ho bisogno.