【问题标题】:passing data from hook to view in codeigniter将数据从钩子传递到codeigniter中的视图
【发布时间】:2015-06-25 06:46:24
【问题描述】:

我可以将数据从钩子传递到视图吗,如果可能请解释一下。

例如

 $hook['post_controller_constructor'][] = array(
    'class'    => 'Varify_user',
    'function' => 'user_project',
    'filename' => 'varify_project.php',
    'filepath' => 'hooks',
    'params'   => array('')
);

我想发送一些数组数据 varify_project.php(hook file) 来查看。

【问题讨论】:

  • 你的意思是你想在你的视图中添加一些数组数据?像$this->load->view('view',$data);$data 是你的钩子数组吗?

标签: php codeigniter codeigniter-2


【解决方案1】:

如果您想在加载视图时添加额外的数据,您可以像这样扩展核心加载器类:

application/core/MY_Loader.php

<?php
class MY_Loader extends CI_Loader {
    public function view($view, $vars = array(), $return = FALSE)
    {
        $vars['hello'] = "Hello World";
        return $this->_ci_load(array('_ci_view' => $view, '_ci_vars' => $this->_ci_object_to_array($vars), '_ci_return' => $return));
    }
}

$vars['hello'] 然后会创建一个变量,您可以在名为 $hello 的任何视图中使用该变量,并且可以重复创建任意数量的变量,前提是您希望在应用程序的每个页面上使用它们。

【讨论】:

  • 嗨,Ben thnx 真的.... 很好的尝试... ...但 splash58 正确解释代码。
  • @PavnishYadav 我在那个答案中没有看到任何解释,只有代码。如果你认为这个答案还可以,为什么不投票呢?
【解决方案2】:

我这样做

application/core/MY_Loader.php

class MY_Loader extends CI_Loader {
    static $add_data = array();
    public function view($view, $vars = array(), $return = FALSE)
    {
       self::$add_data = array_merge($vars, self::$add_data);
       return $this->_ci_load(array('_ci_view' => $view, '_ci_vars' => $this->_ci_object_to_array(self::$add_data), '_ci_return' => $return));
    }
}

application/config/hooks.php

$hook['post_controller_constructor'] = function() {
    MY_Loader::$add_data['hello'] = "Hello World";
} ;

【讨论】:

  • 考虑编辑您的答案,为您的代码解决问题的原因和方式添加解释。
  • 我同意@Mephy 的观点,并且对您最近的贡献也提供了相同的反馈。由于没有对这个问题进行任何编辑,因此我投反对票,并表示歉意。如果您愿意添加一两句话,我很乐意删除 DV。
  • 我真的不明白,这些简单的代码可以添加什么。对于那些使用 Codeigniter 钩子的人来说,这似乎很清楚
【解决方案3】:

我没有足够的代表来评论splash58's answer,所以我在这里添加它以防它对某人有用。

由于 _ci_object_to_array() 不再可用并发送错误,自定义加载程序代码应该是(因为它是自 3.1.3 以来的核心):

class MY_Loader extends CI_Loader {

    static $add_data = array();

    public function view($view, $vars = array(), $return = FALSE)
    {
       self::$add_data = array_merge($vars, self::$add_data);
       return $this->_ci_load(array('_ci_view' => $view, '_ci_vars' => $this->_ci_prepare_view_vars(self::$add_data), '_ci_return' => $return));
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-09
    • 1970-01-01
    • 2016-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多