CodeIgniter:创建新的帮手?


147

我需要以不同的方式循环很多数组,并将其显示在页面中。数组由模块类生成。我知道最好不要在'views'中包含函数,而且我想知道在哪里插入函数文件。

我知道我可以'延长'帮手,但我不想延长帮手。我想创建一个帮助我的循环函数..让我们叫它loops_helper.php

  0

为什么你不能只是通过这些阵列的看法? 29 4月. 092009-04-29 22:07:44

  0

我可以,但是错过了从函数中剔除视图的问题。 29 4月. 092009-04-29 22:37:32

322

一个CodeIgniter助手是一个PHP文件具有多个功能。 它不是一个类

创建一个文件并将下面的代码放入其中。

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 

if (! function_exists('test_method')) 
{ 
    function test_method($var = '') 
    { 
     return $var; 
    } 
} 

保存这应用程序/佣工/。我们称之为“new_helper.php”

第一行的存在是为了确保文件不能包含在CodeIgniter范围之外并且运行。之后的一切都是自我解释。

使用助手


这可以在你的控制器模式视图(不推荐)

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

echo test_method('Hello World'); 

如果您在大量的使用这个帮手您可以通过将它添加到自动加载配置文件(例如<your-web-app>\application\config\autoload.php)来自动加载它。

$autoload['helper'] = array('new_helper'); 

-Mathew

+21

请务必使用帮助程序文件名称附加“_helper”,否则会出现错误。所以“helper_name”将无法正常工作,但将您的文件命名为“name_helper”。 11 12月. 122012-12-11 10:06:46

+3

从CI2开始,您还需要获取CI实例才能在模型中使用助手:$ ci = get_instance(); $ CI->负载>帮手(” name_helper”); 24 4月. 132013-04-24 09:36:42

+3

请注意,助手不具备*功能。它也可以是一堂课。例如,请查看在[EllisLab论坛]上创建“Widgets”的策略(http://ellislab.com/forums/viewthread/109584/P70)。然后,你可以在任何地方使用这个类...也可以,如果你希望通过获取实例并将'$ this'设置为属性,你可以将你的帮助器加载到CI实例中...如果你想要当然。 26 4月. 132013-04-26 15:24:34

+2

if function_exists检查有什么用处?它是一个代码点燃的东西,这是一个普遍的PHP良好的做法吗?你为什么需要它? 14 4月. 142014-04-14 09:33:42

+1

@skrln有一个机会,你有一个自动加载助手(让我们称之为'cool_helper'),如果你忘记了这一点,并手动调用'$ this-> load-> helper('cool_helper')'已加载,你会得到一个“已经定义”的PHP错误或什么的。这可以防止两次加载相同的代码(这与'include_once()'PHP函数类似,但对于CodeIgniter帮助程序来说是为了避免问题)。基本上,翻译一点:**如果函数不存在,这意味着帮助器以前没有加载。让我们来定义它。** 15 5月. 142014-05-15 16:03:12


8

要创建一个新的助手,你可以按照instructions from The Pixel Developer,但我的建议是不要创建一个帮助只是由特定应用程序的特定部分所需的逻辑。相反,请使用控制器中的逻辑来将阵列设置为最终的预期值。一旦你得到了这些,你可以使用Template Parser Class将它们传递给视图,并且(希望)可以使用简单变量或变量标签对而不是回声和foreach,使视图保持干净。即:

{blog_entries} 
<h5>{title}</h5> 
<p>{body}</p> 
{/blog_entries} 

,而不是

<?php foreach ($blog_entries as $blog_entry): ?> 
<h5><?php echo $blog_entry['title']; ?></h5> 
<p><?php echo $blog_entry['body']; ?></p> 
<?php endforeach; ?> 

从这种方法的另一个好处是,你没有,你会如果你使用自定义的助手做所有的工作担心加入CI实例。


69

过了一段时间才回到这里吗?

我只想写一些代码,允许使用CI实例助手

function yourHelperFunction(){ 
     $ci=& get_instance(); 
     $ci->load->database(); 

     $sql = "select * from table"; 
     $query = $ci->db->query($sql); 
     $row = $query->result(); 
    } 
+8

感谢您展示如何使用CI实例。 28 1月. 102010-01-28 03:10:50

  0

不用担心队友 30 1月. 102010-01-30 05:59:13

  0

哇,这是有用的thanksss :) 12 3月. 112011-03-12 10:13:57

  0

@ r4ccoon,所以没错。甚至没有拿我5分钟回来的实例定义。 :) 31 12月. 142014-12-31 14:01:08

  0

@ r4ccoon,这是一个奇妙的提示 04 3月. 162016-03-04 11:44:37


2

里面/应用程序创建你的助手的名称的文件/佣工,并把它添加到自动加载配置文件/手动加载它。

E.g.放置一个名为user_helper.php文件与此内容/应用/佣工

<?php 
    function pre($var) 
    { 
    echo '<pre>'; 
    if(is_array($var)) { 
     print_r($var); 
    } else { 
     var_dump($var); 
    } 
    echo '</pre>'; 
    } 
?> 

现在,你可以通过$this->load->helper(‘user’);加载助手或将其添加到的application/config/autoload.php配置。


13

好吧,我只能在php文件中添加文本"_helper"后,如:

Codeiginiter Helpers

并以文件夹aplication自动加载帮手 - >文件autoload.php添加在array helper的名字没有“_helper”就像:

$ autoload ['helper'] = array('comunes');

有了这样我可以使用所有辅助的功能

+1

我刚刚发现,就像你说的,CodeIgniter将需要'_helper'在文件名的末尾。 30 5月. 132013-05-30 20:48:52

+4

使用NetBeans的+1 :) 08 11月. 132013-11-08 12:21:43

  0

@Jared,是的,我也是这样,它需要_helper在文件名的末尾! 19 9月. 142014-09-19 09:52:30


1

只要定义在应用助手目录 一个助手,那么从您的控制器调用只是函数名状

helper name = new_helper.php 
function test_method($data){ 
return $data 
} 

在控制器 负荷帮手

$this->load->new_helper(); 
$result = test_method('Hello world!'); 
if($result){ 
echo $result 
} 

输出将为

Hello World! 

1

从您的配置文件中检索项目,使用以下功能:

$this->config->item('item name'); 其中项目名称是要检索的$配置数组索引。例如,为了获取你的语言选择,你会做这样的:

$lang = $this->config->item('language'); 该函数返回FALSE(布尔)如果你想获取该项目不存在。

如果您使用$ this-> config-> load函数的第二个参数为了将配置项目分配给特定索引,您可以通过在$ this的第二个参数中指定索引名称来检索它 - > config-> item()函数。例如:

//加载名为blog_settings.php配置文件,并将其分配给名为索引“blog_settings”

$this->config->load('blog_settings', TRUE); 

//检索包含在blog_settings阵列内的配置项命名SITE_NAME

$site_name = $this->config->item('site_name', 'blog_settings'); 

//指定相同的项目的另一种方法:

$blog_config = $this->config->item('blog_settings'); 

$ site_name = $ blog_config ['site_name'];