2016-03-22 6 views
0

'da "ürün" var mı kontrol edin, alan doğrulaması konusunda sorun yaşıyorum.Formdaki alanı doğrula - CakePhp 3

Form aracılığıyla modeli doğrulamak istiyorum. Bir değeri olan alanın olup olmadığını kontrol etmek istiyorum.

Bazı başlıkların bir kereden fazla kullanılmasını engellemek istiyorum. Örneğin

başlığı "Ana" ile tarla "Site" veritabanında varsa, formu doğrulamak mümkün değil.

Eğer yoksa, iletebilirsiniz.

Kullanıcının "Ana" başlıklı bir "Site" eklemesine izin vermek istiyorum, ancak her durumda başka bir başlık içeren "Site" ekleyebilir.

Nasıl çözüleceğine dair bir fikriniz var mı?

+0

aşağıdaki işlevi ekleyebilirsiniz yapmak için size tablo yapısı hakkında bize ve alanlar doğrulamaya istiyorsanız çok daha kolay olacak. –

cevap

1

İki seçeneğiniz olduğunu düşünüyorum.

(1) Sunucuya bir Ajax isteği kurun.

Bunu yapmak için:

  • , bir Ajax isteğine yanıt veren bir işlev oluşturun, yolları ile dosya checkname adlı sizin SiteController() içinde

    public function checkName($name) { 
        // allow ajax requests 
        $this->request->allowMethod(['ajax']); 
        // perform your check within the db 
        $isExistent = [...]; 
        // prepare the response 
        $response = ['name' => $name, 'isExistent' => $isExistent]; 
    
        if ($this->request->isAjax()){ 
         $this->autoRender = false; 
         $this->response->disableCache(); 
         $this->response->type(['json' => 'application/json']); 
         $this->response->body(json_encode($response)); 
        } 
    } 
    
  • yolu ekleme '_ext' => 'json'

    Tanımladığınız rotayı çağıran Javascript Ajax işlevinizi hazırlayın ve giriş alanınızın onchange özniteliğine iliştirin. (Basit bir örnek olarak bu bağlantıyı bakın: http://www.w3schools.com/jquery/ajax_ajax.asp)

(2) Sitesi tablonun 'adı' alanına benzersiz olun.

böylece SiteTable sınıfa

public function buildRules(
    RulesChecker $rules 
) { 
    $rules->add($rules->isUnique(['name'])); 
    return $rules; 
}