CodeIgniter:创建新助手?

Jon*_*han 174 php codeigniter codeigniter-helpers

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

我知道我可以"扩展"帮助者,但我不想扩展帮助者.我想用循环函数创建一个帮助器.让我们称之为loops_helper.php

The*_*per 370

CodeIgniter助手是一个具有多个功能的PHP文件.这不是一个阶级

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

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

if ( ! function_exists('test_method'))
{
    function test_method($var = '')
    {
        return $var;
    }   
}
Run Code Online (Sandbox Code Playgroud)

将此保存到application/helpers /.我们称之为"new_helper.php"

第一行是为了确保无法包含文件并从CodeIgniter范围外部运行.在此之后的一切都是自我解释的.

使用助手


这可以在您的控制器,模型视图中(不是更可取)

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

echo test_method('Hello World');
Run Code Online (Sandbox Code Playgroud)

如果您在许多位置使用此帮助程序,则可以通过将其添加到自动加载配置文件来自动加载它,即<your-web-app>\application\config\autoload.php.

$autoload['helper'] = array('new_helper');
Run Code Online (Sandbox Code Playgroud)

-Mathew

  • 始终使用帮助文件名附加"_helper",否则您将收到错误.所以"helper_name"不会工作,但将文件命名为"name_helper". (29认同)
  • 从CI2开始,您还需要获取CI实例才能在模型中使用帮助程序:$ ci = get_instance(); $ CI->负载>帮手( 'name_helper'); (3认同)
  • 只是一个注释,帮助者没有*成为一个函数.它也可以是一个班级.例如,查看在[EllisLab论坛]上创建"小部件"的策略(http://ellislab.com/forums/viewthread/109584/P70).然后你可以在任何地方使用该类......同样,Techridgeally,你可以将你的助手加载到CI实例中,如果你想通过获取实例然后将`$ this`设置为它的属性...如果你想要的话当然. (3认同)
  • if function_exists检查有什么用?它是代码点火器的东西,它是一般的PHP好习惯吗?你为什么需要它? (2认同)
  • @skrln 有可能你有一个自动加载的助手(我们称之为`cool_helper`),如果你忘记了这一点并在它自动加载后手动调用`$this-&gt;load-&gt;helper('cool_helper')`加载后,您将收到“已定义”的 PHP 错误或其他信息。这可以防止两次加载相同的代码(它类似于 `include_once()` PHP 函数,但对于 CodeIgniter 助手,以避免出现问题)。基本上,稍微翻译一下:**如果函数不存在,则表示之前未加载帮助程序。让我们定义它。** (2认同)

r4c*_*oon 78

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

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

    $sql = "select * from table"; 
    $query = $ci->db->query($sql);
    $row = $query->result();
}
Run Code Online (Sandbox Code Playgroud)

  • 感谢您展示如何使用CI实例. (8认同)

小智 17

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

Codeiginiter助手

并自动加载文件夹aplication中的帮助程序- >文件autoload.php在数组助手中添加没有"_helper"的名称,如:

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

有了它,我可以使用所有助手的功能


lim*_*ima 11

要创建一个新的帮助器,您可以按照Pixel Developer说明进行操作,但我的建议不是仅为特定应用程序的特定部分所需的逻辑创建帮助器.相反,在控制器中使用该逻辑将数组设置为其最终预期值.一旦你得到它,你就可以使用Template Parser Class将它们传递给视图,并且(希望)你可以使用简单的变量或变量标记对而不是echos和foreach来保持视图清晰.即:

{blog_entries}
<h5>{title}</h5>
<p>{body}</p>
{/blog_entries}
Run Code Online (Sandbox Code Playgroud)

代替

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

此方法的另一个好处是,您不必担心添加CI实例,就像使用自定义帮助程序完成所有工作一样.