Phalcon:全局关键字在Index Controller中不起作用

时间:2014-04-09 11:19:37

标签: php global-variables phalcon

这篇文章可能很长而且很混乱但很好......所以我的网站是原始的PHP

我的原始文件结构:

/Index.php
/Users.php
/Smarty.class.php
/db.php
/Stats.php
/css/
/js/

现在我想将每个索引文件“移植”到phalcon控制器中,如下所示:

/Controllers/IndexController.php
/Controllers/UsersController.php
/Smarty.class.php
/db.php
/css/
/js/

问题是全局关键字在IndexController.php中不起作用:

class IndexController extends \Phalcon\Mvc\Controller
{
          include "/db.php"; // $db is initialized there
          include_once ("Smarty.class.php"); 
          $main_smarty = new Smarty;

   public function indexAction()
  {

     function doSearch($limit) {

    global $db, $current_user, $main_smarty; // db and smarty objects
            $db->get_results("// my query"");
    $search_clause = $this->get_search_clause();
            $main_smarty->assign('search', $this->searchTerm);
    }
   }
  }

致命错误:在非对象上调用成员函数get_results()

但是在没有Phalcon的原始代码中它可以正常工作。

            include "/db.php";
        function doSearch($limit) {

    global $db, $current_user, $main_smarty;
    $search_clause = $this->get_search_clause();
            $main_smarty->assign('search', $this->searchTerm);

我的引导程序(Index.php)文件:

try {

//Register an autoloader
$loader = new \Phalcon\Loader();
$loader->registerDirs(array(
    'Controllers/',
))->register();

// DI
$di = new Phalcon\DI\FactoryDefault();

//     View component
$di->set('view', function(){
    $view = new \Phalcon\Mvc\View();
    $view->setViewsDir('/');
    return $view;
});

$application = new \Phalcon\Mvc\Application($di);
echo $application->handle()->getContent();

} catch(\Phalcon\Exception $e) {
 echo "PhalconException: ", $e->getMessage();
}

1 个答案:

答案 0 :(得分:2)

哇,在那里,等一下......

很高兴您已经确定您编写的代码可以改进,但改进并不仅仅意味着“将所有内容从一个地方移动到另一个地方”。

你有机会做的是重新思考你是如何做事的,然后进入“更有条理”(在我看来......)的工作方式。

假设您已成功安装了Phalcon,我建议您阅读the first tutorial。这确实是一个很好的资源。

MVC架构是很多网站现在运行的东西,如果你不熟悉它,this link可能会帮助你。

很难直接回答你的问题,因为我认为经过一些阅读后,一切都会变得更加清晰。

在你的情况下,听起来好像拥有这个Smarty类as a service可能是好的,registered with Phalcon可以是dependency injected

有一个去/读,让我/我们知道它是怎么回事。