这篇文章可能很长而且很混乱但很好......所以我的网站是原始的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();
}
答案 0 :(得分:2)
很高兴您已经确定您编写的代码可以改进,但改进并不仅仅意味着“将所有内容从一个地方移动到另一个地方”。
你有机会做的是重新思考你是如何做事的,然后进入“更有条理”(在我看来......)的工作方式。
假设您已成功安装了Phalcon,我建议您阅读the first tutorial。这确实是一个很好的资源。
MVC架构是很多网站现在运行的东西,如果你不熟悉它,this link可能会帮助你。
很难直接回答你的问题,因为我认为经过一些阅读后,一切都会变得更加清晰。
在你的情况下,听起来好像拥有这个Smarty类as a service可能是好的,registered with Phalcon可以是dependency injected。
有一个去/读,让我/我们知道它是怎么回事。