Benim Zend Saklı Yordam arama kodu geliştirin

1 Cevap php

Ben saklı bir yordamı çağıran benim Zend kod geliştirmek nasıl merak ediyorum. Şu anda bir MySQL DB, ve işlerin altında benim denetleyicisi eylem fonksiyonunu kullanarak değilim, ama kötü görünüyor.

public function callSPAction()
{
    $param = $this->_request->getParam('param', 0);

    $bootstrap = $this->getInvokeArg('bootstrap');
    $config = $bootstrap->getOptions();

    $mysqli = new mysqli(
        $config['resources']['db']['params']['host'],
        $config['resources']['db']['params']['root']['username'],
        $config['resources']['db']['params']['root']['password'],
        $config['resources']['db']['params']['dbname']);

    $rs = $mysqli->query(sprintf('CALL mystoredprocedure(%d)',$param));
    if(mysqli_error($mysqli))
    { 
        throw new exception(mysqli_error($mysqli), mysqli_errno($mysqli)); 
    } 
    $this->_helper->redirector('index', 'index');
}

Ben yordamını aramak için Zend_Db sınıfları kullanmayı tercih ediyorum ama bu nasıl yapılabilir emin değilim?

Ben saklı prosedürleri numarayı arıyorum yana, i DB bağlanmak için mantığı sarar bir yardımcı sınıf oluşturmak için daha iyi olacağını düşünüyorum. Bu altta yatan saklı yordam örtecek yöntemleri göstermek istiyorum. Benim denetleyicisi kod sonra sadece diyebiliriz

StoredProcedureHelper::callMyStoredProdecure($this->_request->getParam('param', 0);

Bu mümkün ve hatta tavsiye mi?

1 Cevap

Ben veri erişimi için modellerin kullanımı lehine olacaktır. Ayrıca, ben gelecekte farklı bir veritabanına işaret gerekir böylece uygulama durumunda belirli bir DB yöneticisine bağlı olmayan bu uygulama kodu şeffaf yüzden uygulamanın config dosyasına db adaptör tanımlamak ve PDO kullanmanızı tavsiye ederim .

Yerine denetleyicisinin eylem veri erişim mantığı tüm olan aşağıdaki gibi Örneğin, bu basitleştirilmiş olabilir:

//within some controller action
$model = MyUbberCoolSuperModel();
$model->myUbberCoolMethod($params);

//And in your model, wich can extend Zend_Db_Table_Abstract
public function myUbberCoolMethod($params)
{
   $pdo = $this->getAdapter()->prepare("CALL myProcedure(:param)");
   $pdo->bindParam(':param', $param, PDO::PARAM_STR); 
   $pdo->execute();
   // Any additional logic you might want to do
}

Ben bu şekilde kontrolör modeline yöntemini çağırmanın sadece sorumludurlar olduğunu net olduğunu düşünüyorum, ama modeli veri erişimi yönetir. Veri erişimi ile ilgili bir şey refactored gerekiyorsa Yani, sen başka şeyler etkileyebilecek herhangi bir denetleyici eylemleri değiştirerek yerine gitmek zorunda hangi modeli biliyorum, değişti, ya da her neyse.

Umarım yardımcı olur ;)

Şerefe.