CodeIgniter:创建新的助手?


178

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

我知道我可以“扩展”助手,但是我不想扩展助手。我想用我的循环函数创建一个助手。让我们称之为loops_helper.php


为什么不能只将这些数组传递给视图?
Mike Hordecki 09年

我可以,但是错过了从功能中分离视图的要点。–
Jonathan

Answers:


378

CodeIgniter助手是一个具有多种功能的PHP文件。这不是一堂课

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

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

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

将此保存到application / helpers /中。我们将其称为“ 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');

-马修


33
始终使用在辅助文件名后附加“ _helper”的方式,否则会出现错误。因此,“ helper_name”将不起作用,但将文件命名为“ name_helper”。
Bhumi Singhal

3
从CI2开始,您还需要获取CI实例才能在模型中使用帮助器:$ ci = get_instance(); $ ci-> load-> helper('name_helper');
Evernoob

3
请注意,帮助程序不必一定是一个函数。它也可以是一类。例如,在EllisLab的Forum上查看创建“小部件”的策略。然后,您可以在任何地方使用该类...同样,从技术上讲,如果需要,您可以通过获取实例,然后将其设置$this为CI 属性来将其加载到CI实例中。
Redneck将军

2
if function_exists检查的用途是什么?它是代码点火器,还是通用的php最佳实践?你为什么需要它?
skrln 2014年

2
@skrln可能会自动加载一个助手(让我们称它为cool_helper),如果忘记了它并$this->load->helper('cool_helper')在自动加载后手动调用它,则会收到“已定义”的PHP错误或类似内容。这样可以防止两次加载相同的代码(这类似于include_once()PHP函数,但适用于CodeIgniter帮助程序,以避免出现问题)。基本上,需要一点翻译:如果函数不存在,则意味着之前没有加载过辅助函数。让我们定义它。
亚历杭德罗·伊万

79

允许您在助手中使用CI实例的一些代码:

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

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

1
@ r4ccoon,好吧。甚至没有花我5分钟时间就返回实例定义。:)
user1048839

@ r4ccoon,这是一个绝妙的秘诀
Arun

17

对我来说,仅"_helper"在php文件中添加文本后即可,例如:

Codeiginiter助手

并在文件夹aplication->文件autoload.php中自动加载帮助程序,在数组帮助程序的名称中添加不含“ _helper”的名称,例如:

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

这样我就可以使用所有助手功能


1
我刚刚发现,就像您说的那样,CodeIgniter将要求_helper在文件名的末尾。
贾里德·艾特尼尔

@Jared,是的,对我来说也是这样,它在文件名末尾需要_helper!
pollux1er 2014年

11

要创建新的帮助程序,您可以按照Pixel Developer说明进行操作,但是我的建议不是仅根据特定应用程序的特定部分所需的逻辑创建帮助程序。而是在控制器中使用该逻辑将数组设置为其最终预期值。一旦知道了这一点,就可以使用Template Parser类将它们传递给视图,并且(希望如此)可以使用简单的变量或变量标签对(而不是echo和foreach)使视图看起来像PHP一样干净。即:

{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实例。


3

/ application / helpers中以您的助手名称创建文件,并将其添加到自动加载配置文件中/手动加载。

例如,在/ application / helpers中放置一个名为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 config。


3

只需在应用程序帮助程序目录中定义一个帮助程序,然后从您的控制器中调用函数名称即可

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!

3

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

$this->config->item('item name'); 其中项目名称是您要检索的$ config数组索引。例如,要获取您的语言选择,请执行以下操作:

$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'];

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.