2015-04-15 16 views
6

Devo aggiungere un nuovo pulsante personalizzato a ActionColumn di Yii2. Utilizzando esempi disponibili in Internet, sono riuscito a creare una chiusura per il rendering di un pulsante personalizzato e ora esegue il rendering con l'URL predefinito.Pulsante ActionColumn con URL personalizzato

Ma, ho bisogno con un URL personalizzato.

sono riuscito ad ottenere questo fatto, sovrascrivendo $url valore, che la funzione di chiusura del mio pulsante personalizzato è alimentato, con URL generato utilizzando altri parametri della funzione, come quella:

'buttons' => [ 
    'see' => function ($url, $model, $key) { 
     $options = [ 
      'title' => Yii::t('yii', 'See in frontend'), 
      'aria-label' => Yii::t('yii', 'See'), 
      'data-pjax' => '0', 
     ]; 
     $url = \yii\helpers\Url::toRoute(['lab/index', 'lab' => $key]); 

     return Html::a('<span class="glyphicon glyphicon-asterisk"></span>', $url, $options); 
    } 
], 

Funziona, ma esso isn' troppo professionale Volevo usare urlCreator proprietà, come mostrato nella Kartik's example from Yii Forum:

'urlCreator' => function ($action, $model, $key, $index) { 
    if ($action === 'see') { 
     return \yii\helpers\Url::toRoute(['lab/index', 'lab' => $key]); 
    } 
} 

Ma, questo esempio non funziona. Genera solo l'URL corretto per il mio pulsante personalizzato e lascia i pulsanti predefiniti non funzionanti, senza alcun URL. Ciò è comprensibile, assumendo, come funziona urlCreator. Ma come risolvere questo problema? Come posso ottenere l'accesso a ActionColumn per utilizzare la proprietà controller per generare URL per i pulsanti predefiniti o come forzare la generazione di questi URL per me?

risposta

7

Uso del genere:

'urlCreator' => function ($action, $model, $key, $index) { 
         if ($action === 'yandexCampaign') { 
          return Url::toRoute(['add-yandex-campaign', 'id' => $model->id]); 
         } else { 
          return Url::toRoute([$action, 'id' => $model->id]); 
         } 
        } 

È necessario impostare else caso per i pulsanti predefiniti.

+0

Suona alla grande. Ma c'è ancora una domanda, perché abbiamo bisogno di giocare con urlCreator affatto, per ottenere questo, invece di modificare '$ url' direttamente nella chiusura del pulsante, come ho mostrato nel mio approccio" pigro ". Sembra essere meglio avere rendering di pulsanti personalizzati e URL personalizzati in un unico posto, giusto? – trejder

+0

Sono d'accordo che non è il modo migliore per impostare il codice per i pulsanti di default. Ma si esegue l'override del metodo 'ActionColumn :: createUrl'. Significa che devi impostare il codice per i pulsanti personalizzati e di default. Altro modo non impostato. –

Problemi correlati