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?
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
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. –