2015-07-07 17 views
5

Modelimi normal bir gönderme düğmesiyle güncellemek için tipik bir Yii2 formum var. Yanında, silinecek herhangi bir fotoğraf varsa, görünen "Fotoğrafı sil" düğmesi var. Görüş parçası gibi görünüyor:Yii2 formundaki ek düğme, eylemini çağırmak yerine formu gönderir

<?= Html::submitButton('Save changes', ['class' => 'btn btn-primary', 'name' => 'edit-button']) ?> 

<?php $image = isset($page->photo) ? $page->photo->getImageUrl() : null; ?> 

<?php if (isset($image)): ?> 

    <?= Html::a('Delete photo', ['delete-image', 'lab' => $lab->id, 'kind' => $page->kind], [ 
     'class' => 'btn btn-danger', 
     'data' => [ 
      'confirm' => 'Do you really want to delete this photo?', 
      'method' => 'post' 
     ], 
    ]) ?> 

<?php endif; ?> 

orada Bu modele bağlı bir fotoğraftır ve bu iki düğme yanyana belirdiğinde, ikinci düğme kodunda 'method' => 'post' bölümünü yorumlamak gerekir. Çünkü, eğer bunu yapmazsam, ikinci düğme ... lab/delete-image rotasını çağırmak yerine formu (ilkindeki gibi) gönderiyor.

Bu, anlamadığım ilk şey. Tüm kod ya Gii tarafından oluşturulur ya da bazı Yii eğiticilerinden kopyalanır. Benim icadım bile değil ama yine de garip çalışır. Neyi kaçırıyorum? İçerdiği zaman

Öyle görünüyor, bu normal Html::a bağlantı (sadece Heyecan Bootstrap tarafından şekillendirilen düğme gibi görünür, ama bir düğme hiç olmadığı kadar) form gönderme yerine eylemini çağırıyor, data-method="post" niteliğini öğe kodunda. Bu Yii2'deki bir hata mı yoksa bir şey mi özlüyorum?

+1

Bu sorunun ikinci kısmını kaldırdık tarafından kodlanmış olacaktır. VerbFilter, çift sözcük eylemi adları için 'delete-image',' deleteImage' değil eylem adı olarak kullanılmalıdır. – trejder

cevap

8

Bağlantıyı, formun dışına yerleştirmeniz gerekir. data-method nitelik yii ile elementlerden eylemleri dediğin için js fonksiyonunu handleAction vardır ve dokümantasyon diyor ki:

Bu yöntem elemanının data-method niteliğini tanır. Öznitelik varsa, yöntem bu öğeyi içeren formu gönderir. İçerme formu yoksa, bu özellik değeri (ör. "Post", "put") ile verilen yöntem kullanılarak bir form oluşturulacak ve gönderilecektir.

Köprüler için, form eylemi, bağlantının "href" özniteliğinin değerini alır.

Ayrıca yii2 v2.0.3 kullanırsanız veya ne kadar yüksek değer verilerinin JSON gösterimi olmalıdır data-params özelliğini ekleyebilirsiniz ve bu veri talebinde sunulacaktır. Örnek olarak: o kavram yanlış anlama/basit yazım hatası sonucu olduğu için bu örnekte

echo Html::a('Delete image', ['delete-image'], [ 
    'data' => [ 
     'confirm' => 'Do you really want to delete this photo?' 
     'method' => 'post', 
     'params' => [ 
      'lab' => $lab->id, 
      'kind' => $page->kind, 
     ], 
    ], 
]); 

params dizisi json, olarak internal yii2

+0

"_Delete image_" düğmesinden bahsetmiş olmanız için herhangi bir örnek ("data-params" ile) alternatif olarak sağlayabilir misiniz? – trejder

+1

@trejder eklenen örnek – Tony

+0

@Tony ve trejder: Bunu nasıl kullanırız lütfen açıklayınız? –