CI2中的共享功能:助手?图书馆?

时间:2012-04-23 12:55:05

标签: function codeigniter codeigniter-2

我仍然是OOP的新手,并且一直在学习CodeIgniter2 + Doctrine2。

我有几个共享功能,在我的项目的各个方面都很方便,所以我想打电话给他们。在程序PHP中,我只是将它们粘贴在库文件中并调用它们。但那现在对我不起作用..

include 'function_library.php';
$name = $this -> function_library -> generate_male_name();
  

消息:未定义属性:转动:: $ function_library

我甚至读过你需要使用call_function()的地方,但那只能让我:

  

致命错误:调用未定义的方法Turn :: call_function()

所以我想也许我应该把它作为助手加载。

$this->load->helper('character_helper');
echo generate_male_name();
  

致命错误:在不在对象上下文中时使用$ this   /PATH/systemFolder/helpers/character_helper.php   第19行

第19行:

  

$ query = $ this-> doctrine-> em-> createQuery(“从ORM \ Dynasties2 \ Malenames u”中选择max(u.id));

我考虑将其设置为图书馆,但老实说,在类等方面,我开始有点过头了。我没试过。

以下是该功能的全部内容:

function generate_male_name() {
        $query = $this->doctrine->em->createQuery("select max(u.id) from ORM\Dynasties2\Malenames u");
         $result = $query->getSingleResult();
         //echo $result2[1];
         $highval = $result[1];
         $random_name = rand(1,$highval);
         //echo $random_name;
         $name = $this->doctrine->em->find('ORM\Dynasties2\Malenames', $random_name);
         return $name->getName();     
    }

我该怎么做?

编辑:

尝试了一些额外的事情,仍然没有成功。

我把我的function_library放在third_party中,然后执行了:

$this->load->add_package_path(APPPATH.'third_party/function_library/');
$name = $this -> generate_male_name();
  

致命错误:调用未定义的方法Turn :: generate_male_name()

$name = $this -> function_library -> generate_male_name();

  

消息:未定义属性:转动:: $ function_library

我并不是因为在自动加载器中调用它而感到疯狂,我不需要无处不在,这看起来效率低下。

我已经阅读了图书馆,但正如我所说,课程很快就在我的脑海中,创建一个新的图书馆对我来说似乎有点令人生畏。

* 这里最好的解决方案是什么?我如何分享一些功能?图书馆是我需要去的方式,还是我只是在尝试帮助或共享功能工作时遗漏了一些小事?*

1 个答案:

答案 0 :(得分:0)

可能不是答案,只讨论CodeIgniter

  

致命错误:在不在对象上下文中时使用$ this   第19行的/PATH/systemFolder/helpers/character_helper.php

当您尝试在对象上下文之外使用带有CI关键字的$this实例时(当CI未实例化时),会发生这种情况。观察上面的错误我可以猜测你在帮助器$this内使用character_helper.php,它位于helpers文件夹内但在CI对象上下文之外。要使用CI对象,您必须使用

实例化CI
$ci = & get_instance();

并在帮助程序中使用$ci代替$this

如果您想在任何控制器内使用您的助手,那么您可以像往常一样在控制器内正常加载它,即

$this->load->helper('character_helper');

如果您的帮助者有一个函数generate_male_name,那么您可以在控制器中调用它,如下所示

generate_male_name();
  但是,这只能在您的控制器中直接使用   模特或你的观点。

Creating CodeIgniter Libraries.