Olmayan bir nesne üzerinde bir üye işlev çağrısı

4 Cevap php

Şu anda Practical Web 2.0 Appications ile çalışıyorum ve bir barikat biraz vurdu. Ben bu yüzden uygulama oluşturmak için başlayabilir PHP, MySQL, Apache, Smarty ve tüm doğru çalışıyor Zend Framework almaya çalışıyorum. Burada gösterilen, Zend çalışma için önyükleme dosyasını aldık:

<?php
    require_once('Zend/Loader.php');
    Zend_Loader::registerAutoload();

    // load the application configuration
    $config = new Zend_Config_Ini('../settings.ini', 'development');
    Zend_Registry::set('config', $config);


    // create the application logger
    $logger = new Zend_Log(new Zend_Log_Writer_Stream($config->logging->file));
    Zend_Registry::set('logger', $logger);


    // connect to the database
    $params = array('host'     => $config->database->hostname,
                    'username' => $config->database->username,
                    'password' => $config->database->password,
                    'dbname'   => $config->database->database);

    $db = Zend_Db::factory($config->database->type, $params);
    Zend_Registry::set('db', $db);


    // handle the user request
    $controller = Zend_Controller_Front::getInstance();
    $controller->setControllerDirectory($config->paths->base .
                                        '/include/Controllers');

    // setup the view renderer
    $vr = new Zend_Controller_Action_Helper_ViewRenderer();
    $vr->setView(new Templater());
    $vr->setViewSuffix('tpl');
    Zend_Controller_Action_HelperBroker::addHelper($vr);

    $controller->dispatch();
?>

Bu IndexController çağırır. Hata Zend ile Smarty uygulamak için bu Templater.php kullanımı ile birlikte geliyor:

<?php
    class Templater extends Zend_View_Abstract
    {
        protected $_path;
        protected $_engine;

        public function __construct()
        {
            $config = Zend_Registry::get('config');

            require_once('Smarty/Smarty.class.php');

            $this->_engine = new Smarty();
            $this->_engine->template_dir = $config->paths->templates;
            $this->_engine->compile_dir = sprintf('%s/tmp/templates_c',
                                                  $config->paths->data);

            $this->_engine->plugins_dir = array($config->paths->base .
                                                '/include/Templater/plugins',
                                                'plugins');
        }

        public function getEngine()
        {
            return $this->_engine;
        }

        public function __set($key, $val)
        {
            $this->_engine->assign($key, $val);
        }

        public function __get($key)
        {
            return $this->_engine->get_template_vars($key);
        }

        public function __isset($key)
        {
            return $this->_engine->get_template_vars($key) !== null;
        }

        public function __unset($key)
        {
            $this->_engine->clear_assign($key);
        }

        public function assign($spec, $value = null)
        {
            if (is_array($spec)) {
                $this->_engine->assign($spec);
                return;
            }

            $this->_engine->assign($spec, $value);
        }

        public function clearVars()
        {
            $this->_engine->clear_all_assign();
        }

        public function render($name)
        {
            return $this->_engine->fetch(strtolower($name));
        }

        public function _run()
        { }
    }
?>

Ben sayfasını yüklediğinizde ben alıyorum hata şudur:

Ölümcül hata: satır 60 / var/www/phpweb20/include/Templater.php olmayan bir nesne üzerinde () getirme üye işlev çağrısı

Ben bir nesne olarak $ isim görmüyor anlıyorum, ama ben bu tespit gitmek bilmiyorum. Kontrolör index.tpl başvurmak gerekiyor değil mi? Ben vakıf çalışma almak için bu nasıl düzeltebilirim $ name değişkeni temsil keşfetmek mümkün değil var.

Eğer herhangi bir yardım çok takdir!

4 Cevap

Sorun $ name değişkeni ile değil $ _engine değişken değildir. Şu anda boş. Sen Smarty.class.php için yol belirtimi doğru olduğunu doğrulamak gerekir.

Eğer hata ayıklama başlamak için bu deneyebilirsiniz:

$this->_engine = new Smarty();
print_r($this->_engine);

O $ _engine bu aşamada doğru olduğu ortaya çıkarsa, o zaman hala doğru () işlevi işlemek içinde doldurulur olduğunu doğrulayın.

Zend burada Zend_View_Interface uygulayan bir çiftleşmiş sistemi oluşturma, bir örnek vardır: http://framework.zend.com/manual/en/zend.view.scripts.html#zend.view.scripts.templates.interface

Bu özel bir çözüm hata ayıklama çalışırken biraz zaman sizi kurtarabilir.

__ construct yöntemini kaldırarak, sınıftan, ben bakan benzer bir sorunu çözdü.

__construct() Tempater() benim için çalıştı için yeniden adlandırılıyor.