PHP Hata işleme

1 Cevap php

Biz Good old CodeIgniter çerçeve dayalı bir PHP uygulaması inşa ediyoruz ve birden fazla modeli çağrıları oluşan büyük bir zincirleme eylemi ile sorun haline çalıştırmak, bir arada veritabanına büyük bir işlemin bir parçasıdır.

Biz sonuç ne olursa olsun, eylemlerin bir listesini yapın ve geri fonksiyonu, her biri bir durum raporu elde edebilmek istiyorum.

Bizim ilk ilk fikir PHP5 istisnalar kullanmak oldu, ama biz de komut dosyası yürütülmesine bölmez durum iletilerini ihtiyaç istiyorum çünkü, bu biz geldi bizim çözüm oldu.

Bu gibi küçük bir şey gider:

$sku = $this->addSku( $name );

if ($sku === false) {
    $status[] = 'Something gone terrible wrong';
    $this->db->trans_rollback();
    return $status;
} 

$image= $this->addImage( $filename);

if ($image=== false) {
    $error[] = 'Image could not be uploaded, check filesize';
    $this->db->trans_rollback();
    return $status;
} 

Bizim denetleyicisi bu gibi görünüyor:

$var = $this->products->addProductGroup($array);

if (is_array($var)) {

    foreach ($var as $error) {
        echo $error . '<br />';
    }

}

Biz gerekenleri yapmak için bir çok kırılgan bir çözüm gibi görünüyor, ama örneğin saf PHP istisnalar göre ölçeklenebilir, ne etkili, ne bu.

Bu gerçekten böyle şeyler genelde MVC tabanlı uygulamalar ele olduğu yolu var mı?

Teşekkürler!

UPDATE: Have done a fair share of googling and found this PHP Function: register_shutdown_function. Could it be what we are looking for? I have no Idea and can't get it working the way we want it to... Reference: http://php.net/manual/de/function.register-shutdown-function.php

1 Cevap

PHP bir özel durum işleyici ayarlayabilirsiniz - http://php.net/manual/en/function.set-exception-handler.php

Bu betiğin devam etmesini sağlayacaktır. Bir veritabanına durumunu günlükleri bir işlev oluşturabilirsiniz. Başka bir fonksiyonu ve / veya sınıf mevcut durum raporunu güncellemek için bu almak olabilir. Eğer StatusException ie.throw özel exeption atarsam, özel işleyici istisna türüne almak olabilir ve diğer standart istisnalar varsayılan eylemleri yaparken uygun şekilde log ...

Alternatif veritabanını kullanarak, sadece geçerli oturum için daha sonra başvurulan bir oturum nesnesi vb içine bilgileri depolamak için istisna eylemcisi kullanabilirsiniz.

Bir İstisna işleyicisi kullanarak doğru şey ise ben hala yapmak için çalışıyoruz ne biraz belirsiz değilim ama benim yöntem durumları işleme sırasında kod yürütülmesine devam izin gibi ben hala emin değilim.