首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在视图部分实现一些逻辑,使得视图的其他部分也可以重用

如何在视图部分实现一些逻辑,使得视图的其他部分也可以重用
EN

Stack Overflow用户
提问于 2016-12-19 20:01:08
回答 3查看 302关注 0票数 0

我正在尝试在视图部分做一些帮助器,这样我就可以在整个项目的视图部分共享公共逻辑。

但在CI中似乎没有这样的概念,就像在CakePhp中一样,我可以使用自定义帮助器。

我搜索了很多,但没有得到任何适当的结果来执行。

下面我已经提到了我的视图部分的一些代码。

代码语言:javascript
运行
复制
<?php  $dt2 = strtotime($single->time_stamp);
 $dt1 = strtotime(date("Y-m-d H:i:s"));
  echo (int)(abs($dt1 - $dt2)/(60*60));?>

我已经在视图中使用了这些代码,但我想重用它。

我想调用一个自定义帮助器来传递一个参数,因为另一个参数是当前日期。

有什么建议吗?

提前谢谢你。

EN

回答 3

Stack Overflow用户

发布于 2016-12-19 22:23:53

这将是您的辅助应用程序/helpers/time_diff_helper.php:

代码语言:javascript
运行
复制
<?php

defined('BASEPATH') OR exit('No direct script access allowed');

if (!function_exists('time_diff'))
{
    function time_diff()
    {
        $dt2 = strtotime($single->time_stamp);
        $dt1 = strtotime(date("Y-m-d H:i:s"));
        return (int)(abs($dt1 - $dt2)/(60*60));
    }
}

然后将其加载到控制器中:

代码语言:javascript
运行
复制
$this->load->helper('time_diff');
$tdiff = time_diff();

如果您将其加载到您的控制器中,您还应该能够在视图中使用它。人们会争辩说,业务逻辑不属于视图,视图是用来格式化显示的。您的函数是业务逻辑的一部分还是只是布局的一部分……?我想这是一个解释的问题。我会在控制器中调用它,并将其传递给视图。

代码语言:javascript
运行
复制
$data['time_diff'] = time_diff();
$this->load->view('myscreen1', $data);
票数 1
EN

Stack Overflow用户

发布于 2016-12-19 20:19:36

您可以使用CodeIgniter创建自定义帮助器。您必须将它们放入应用程序/帮助程序中。

下面是如何实现的:

代码语言:javascript
运行
复制
<?php

defined('BASEPATH') OR exit('No direct script access allowed');

if (!function_exists('resize_uploaded_pix'))
{
    function resize_uploaded_pix($pic_full_path, $formatname)
    {
        //global $image_format;

        $config['image_library'] = 'gd2';
        $config['source_image']     = $pic_full_path; 
        $config['create_thumb']     = TRUE;
        $config['maintain_ratio']   = TRUE;

        /*
         * get session load lib and config
         */
        $CI =& get_instance();
        $CI->load->library('image_lib');
        $CI->config->load('myconfig', TRUE);
        $image_format = $CI->config->item('image_format', 'myconfig');   

您不能从帮助器中访问$this。因此,如果您需要在其中使用其他库,则需要像这样获取实例指针:

代码语言:javascript
运行
复制
$CI =& get_instance();
$CI->load->library('image_lib');

然后从你的代码中调用助手代码,在本例中是一个控制器(但在视图中应该是一样的),如下所示:

代码语言:javascript
运行
复制
$this->load->helper('resize_pix');
resize_uploaded_pix($upload_data['upload_data']['full_path'], 'default');
票数 0
EN

Stack Overflow用户

发布于 2016-12-20 19:30:56

是的,它非常简单,不需要做一些额外的工作。

只需在控制器或视图或autoload.php中加载您创建的帮助器,

我把它加载到autoload.php里了

代码语言:javascript
运行
复制
$autoload['helper'] = array('url','string','form','common_helper');

如果你想在控制器/视图中加载它,那么遵循下面的synatx。

代码语言:javascript
运行
复制
$this->load->helper('common_helper');

然后下一步是调用帮助器,根据我的要求,我需要从视图中调用它,因此代码将是。

代码语言:javascript
运行
复制
  <?php        echo time_diff($test->time_stamp);    ?> HOURS AGO

只需调用该函数,调用就比cakephp :)简单得多。

那么它就会工作得很好。

它可能会对像我这样的CI新手有所帮助。快乐编码:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41222150

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档