Zend Framework Model Özet ve boş değerler

0 Cevap php

Ben Zend bazı modeli soyut sınıfları kullanıyorum.

  • Default_Model_Abstract: içerir __ set ve __ olsun ve her değeri için belirleyici ve alıcı ve sanal bir nesne olarak çalışmaktadır.
  • Default_Model_AbstractMapper: böylece, (), (bulmak) tasarruf Fetchall () ve benzeri yöntemler içerir.

Ben Zend Hızlı Başlangıç ​​belgelerine birkaç ay önce bu çözümü buldum. Ama son aylarda, ben null değerleri ile ilgili bazı sorunları vardı.

Ben veritabanından değer var bir Zend_Form_Element_Select elemanı var. Bu değerler bir yabancı anahtarla gelen kimlikleri bulunuyor. Yani sadece geçerli bir yabancı anahtar id veya null kabul edilir. Ama Zend_Form_Element_Select öğesi isteğe bağlıdır, bu yüzden ben bir sonucu olarak boş bir dize almak mümkündür (-> addMultiOption (null, 'senin seçeneğini seçin')). Boş bir dize da izin olacağını, geçerli bir yabancı anahtar id null ne değildir çünkü Ama bu, bana bir hata verecektir.

Benim ilk girişimi seçme elemanları değer bir emptry dize ise, formu kolları benim denetleyicisi kontrol ve null olarak değiştirmek oldu. Bu çirkin ve sorun ben (int) $ değer ile bunu doğrulamak çünkü benim setter, 0 boş değişti, oldu.

public function setId($value)
{
    $this->_id = (int) $value;
    return $this;
}

Yani başka bir yaklaşım değer null ve sonra (int) ile doğrulamak yoksa benim setter kontrol oldu. Yani böyle bir şey olmazdı.

public function setId($value)
{
    if($value !== null)
        $this->_id = (int) $value;
    return $this;
}

Bu, bu durumda fr çalışacak, ama bazen çok null varolan değerini sıfırlamak istiyorum çünkü mantıklı değil. Yani setter null değerleri göz ardı edemeyiz. Yani başka bir yaklaşım olacaktır:

public function setId($value)
{
    if($value !== null)
        $this->_id = (int) $value;
    else
        $this->_id = null;
    return $this;
}

Ama şimdi gerçekten çirkin gidiyor. Ben insanların bu sorunu çözmek nasıl görmek için merak ediyorum. Ben sadece setter (int) çıkarmadan basit bir çözüm olmak zorunda düşünüyorum çünkü. Bildiğim kadarıyla gördüğümüz gibi, bu ayarlayıcı kullanmak için ortak bir yol gibi görünüyor çünkü.

Best regards, Nico

0 Cevap