2015-04-15 17 views
6

Potrzebuję dodać nowy, niestandardowy przycisk do Yii2's ActionColumn. Korzystając z przykładów dostępnych w Internecie, udało mi się utworzyć zamknięcie do renderowania przycisku niestandardowego, a teraz renderuje się z domyślnym adresem URL.Przycisk ActionColumn z niestandardowym adresem URL

Ale potrzebuję go z niestandardowym adresem URL.

udało mi się to zrobić, nadrzędnymi $url wartość, że funkcja zamknięcie mojego przycisk niestandardowy jest karmione, z adresem URL generowanych za pomocą innych parametrów funkcji, tak jak:

'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); 
    } 
], 

To działa, ale to isn” zbyt profesjonalny. Chciałem użyć urlCreator nieruchomości, jak pokazano na Kartik's example from Yii Forum:

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

Ale ten przykład nie działa. Generuje tylko poprawny adres URL dla mojego przycisku niestandardowego i pozostawia domyślne przyciski nie działające, bez żadnego adresu URL. Jest to zrozumiałe, zakładając, że działa urlCreator. Ale jak rozwiązać ten problem? Jak uzyskać dostęp do usługi ActionColumn, aby użyć właściwości controller do generowania adresów URL dla przycisków domyślnych lub jak zmusić ją do wygenerowania dla mnie tych adresów URL?

Odpowiedz

7

Zastosowanie tak:

'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]); 
         } 
        } 

W przeglądarce musi być ustawiony else sprawę do domyślnych przycisków.

+0

Brzmi świetnie. Ale wciąż pozostaje pytanie, dlaczego musimy grać z 'urlCreator' w ogóle, aby to osiągnąć, zamiast modyfikować' $ url' bezpośrednio w zamknięciu przycisku, jak pokazałem w moim "leniwym" podejściu. Wydaje się, że lepiej mieć niestandardowy przycisk renderowania i niestandardowy URL w jednym miejscu, prawda? – trejder

+0

Zgadzam się, że to nie jest najlepszy sposób na ustawienie kodu dla przycisków domyślnych. Ale zastępujesz metodę 'ActionColumn :: createUrl'. Oznacza to, że musisz ustawić kod dla przycisków niestandardowych i domyślnych. Inny sposób nie jest ustawiony. –