我已经创建了一个库,它将加载一个php文件(可能包含用户自定义函数...),你也可以从控制器调用它来自bootstrap。如果文件不存在,它将显示错误消息。我是以现在的方式做的吗?
如果我确实错过任何指出我的事情......谢谢
Helpers是用户可以放置php文件的文件夹
app/
controllers/
models/
helpers/
library/
views/
" library /"将名为" helperfile.php"
的php文件归档class helperfile extends Phalcon\Mvc\User\Component
{
var $helper_Folder = '../app/helpers';
var $files = array();
public function __construct()
{
}
public function initialize()
{
}
public function include_file($files, $run = true)
{
if (!is_array($files))
$files = array($files);
foreach ($files as $file)
$this->files[$file] = $file;
if ($run)
$this->load();
}
public function beforeDispatch()
{
$this->load();
}
private function load()
{
if (empty($this->files))
return false;
foreach ($this->files as $file) {
$file = trim($file) . '.php';
if ($this->is_file_exists($file)) {
require $this->helper_Folder . '/' . $file;
}
}
}
private function is_file_exists($path)
{
$full_path = $this->helper_Folder . '/' . $path;
if (!file_exists($full_path)) {
$this->flash->error("Helper File Missing: " . $full_path);
return false;
}
return true;
}
}
//通过引导程序在每个页面上自动加载文件(" public / index.php")
$di->set('dispatcher', function () {
//Create/Get an EventManager
$eventsManager = new Phalcon\Events\Manager();
/*
* Load Custom function files which are in the helpers folder
*/
$loadHelper = new helperfile();
$loadHelper->include_file([
'calling_from_bootstrap_1',
'calling_from_bootstrap_2'
],false);
$eventsManager->attach('dispatch', $loadHelper);
$dispatcher = new Phalcon\Mvc\Dispatcher();
$dispatcher->setEventsManager($eventsManager);
return $dispatcher;
});
//从控制器
加载它$loadHelper = new helperfile();
$loadHelper->include_file([
'calling_from_theController'
]);
答案 0 :(得分:8)
看起来它起作用了,但我认为你低估了Phalcon可以为你做的工作量。
辅助文件中的内容示例很有用。为了这个例子,我将假设它是这样的:
app/
helpers/
ProductHelper.php
并在ProductHelper.php中
class ProductHelper{
// code here
}
在您拥有装载程序的引导程序中,您可以定义目录
$phalconLoader = new \Phalcon\Loader();
/**
* We're a registering a set of directories taken from the configuration file
*/
$phalconLoader->registerDirs(
array(
$phalconConfig->application->controllersDir,
$phalconConfig->application->modelsDir,
// path to helper dir here
)
)->register();
然后在你的控制器中
public function productAction(){
$productHelper = new productHelper();
}
那应该有用。这是更少的代码,所以更简单应该运行更快(使用phalcon的内置代码而不是写一些PHP总是会更快)
如果帮助程序中的代码不在类中,或者名称与文件名不同,那么它可能应该是。使事情变得更加简单。
启用版本
class ProductHelper extends \Phalcon\DI\Injectable{
public $config;
public function myFunction(){
$this->config = $this->getDI ()->get ('config');
}
}
并在控制器中
public function indexAction()
{
$helper = new ProductHelper();
$helper->setDI($this->getDI());
$helper->myFunction();
}
或者在创建DI时
$di->set ('productHelper', function () use ($config, $di) {
$helper = new ProductHelper();
$helper->setDi ($di);
return $helper;
});
并在控制器中
public function indexAction()
{
$helper = new ProductHelper();
$helper->myFunction();
}