Zend 'Pagina Tile' visualizza helper

1

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.

    
posta AlexP 06.02.2014 - 12:26
fonte

1 risposta

1

Vorrei migrare il codice del plugin fuori dal metodo __invoke e restituire invece un'istanza dell'oggetto helper view. Da lì forniscono metodi per aggiungere pulsanti che memorizzano temporaneamente i dati in un archivio dati interno (array). Da lì hai quindi solo bisogno di un metodo di rendering che utilizza tutti i dati memorizzati per creare l'output. In questo modo non hai mai un elenco di parametri in aumento e puoi fornire metodi più semplici per chiamare con uno scopo specifico.

Uso del campione:

echo $this->pageTitle()->setTitle('My Title')->setIcon('some-icon')->addButton('Test Btn')->addButton('Another Button', array('class' => 'some-class'))->render();

Tutto ciò che è richiesto per questo è un __invoke che semplice fa return $this ei metodi sopra salvano i loro input ai parametri di classe interni. Il tuo codice esistente può essere eliminato nel metodo di rendering e leggermente riprogettato e devi essere impostato.

    
risposta data 14.08.2014 - 04:07
fonte

Leggi altre domande sui tag