Yöntem "_getTable"

2 Cevap php

Yani burada benim denetleyicisi olduğu bir yöntemdir:

private $_tables = array();

private function _getTable($table)
{
    if (!isset($this->_tables[$table])) {
        include APPLICATION_PATH . '/modules/'
        . $this->_request->getModuleName() . '/models/' . $table . '.php';
        $this->_tables[$table] = new $table();
    }
    return $this->_tables[$table];
}

Ben denetleyici eylemleri bu gibi kullanıyorum:

public function pageAction()
{
    $request = $this->getRequest();
    $pages = $this->_getTable('Pages');

    $p = $pages->getSingle($request->getParam('id'));

    // increment number of views in the database
    // it only gets incremented when IP is not the same
    // as last viewer's IP
    $pages->viewIncrement($p->id);

    $this->view->headTitle($p->title
                           . ' - Some cool title');
    $this->view->p = $p;
}

Benim PC'de test ederken localhost üzerinde harika çalışıyor. Bu da benim eski web host üzerinde çalıştı ama ben bu hatayı alıyorum bazı sayfaları görüntülerken Geçenlerde yeni bir web hosting sağlayıcısı benim ZF uygulamalar taşındı ve adres:

Method "_getTable" does not exist and was not trapped in __call()

Bu görüntülenen hepsi bu, başka bir şey yok. Bazı sayfalar olsa çalışmak ve ben tamamen kaybettim bu yüzden bazı bu hatayı gösteriyor. Ne sorun olabilir?

(Bazı sayfalar iş tamam çünkü) Tüm gerekli PHP uzantılarının kurulu ve düzgün yapılandırılmış, veritabanı bağlantısı çalışıyor. Gerçekten hiçbir fikrim yok. En az hata daha açıklayıcı olsaydı.

2 Cevap

Halk gibi, daha az kısıtlayıcı bir şey özel durumunu değiştirmeye çalışın.

Ayrıca tüm sınıflar aynı denetleyici uygulamak emin olun.

Eğer işe yaramazsa eylemleri bu yöntemi uygulayan özel denetleyicisi uzanan emin misiniz? Bu örnekte:

class MyController extends Zend_Controller_Action
{
    protected functoin _getTable($table)
    {
        // implementation
    }
}


class ProductController extends MyController
{
     public function indexAction()
     {
         $this->_getTable('sometable'); // calls MyController::_getTable
     }
}

Tüm kontrolörleri MyController uzatıyorlar?

Nazariy söylediğim gibi, sen protected veya public yöntemin görünürlük erişimciyi ayarlamanız gerekir. private accessor size uzanan sınıflardan bu yöntemi çağırın izin vermez.

Edit: Eğer her denetleyici içine _getTable yöntemi uygulamak olduğunu söyledi olduğundan, uygulanması ile ilgili yöntem adını yanlış yazmış şansı nedir? Belki __getTable (çift çizgi) veya _getTalbe (ters harfler) gibi bir şey?

Ben It'sa temel şeyi biliyorum, ama bazen çok sorun odaklı konum ve (benim için çok olur) ortak çubuğundan çözünürlüğü görmüyorum.

Bu sorun olmasa bile, bu kod tekrarından kaçınmak için, sizin temel denetleyicisi oluşturma ve ondan uzanan düşünmelisiniz.