我可以将数据从钩子传递到视图,如果可能请解释。
例如
$hook['post_controller_constructor'][] = array(
'class' => 'Varify_user',
'function' => 'user_project',
'filename' => 'varify_project.php',
'filepath' => 'hooks',
'params' => array('')
);
我想发送一些数组数据varify_project.php(钩子文件)来查看。
答案 0 :(得分:3)
如果您想在加载视图时添加其他数据,可以像这样扩展核心加载器类:
<强>应用/核心/ 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
的视图中使用的变量,并且可以重复创建任意数量的变量,前提是您希望它们在您的每个页面上使用应用
答案 1 :(得分:1)
我这样做
<强>应用/核心/ 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";
} ;
答案 2 :(得分:0)
我没有足够的代表来评论splash58的答案,所以我在此添加它以防它对某人有用。
由于_ci_object_to_array()不再可用并发送错误,因此自定义加载程序代码应为(自3.1.3版以来一直在内核中):
#!/usr/bin/env bash
set -Eeo pipefail
# TODO swap to -Eeuo pipefail above (after handling all potentially-unset variables)
# usage: file_env VAR [DEFAULT]
# ie: file_env 'XYZ_DB_PASSWORD' 'example'
# (will allow for "$XYZ_DB_PASSWORD_FILE" to fill in the value of
# "$XYZ_DB_PASSWORD" from a file, especially for Docker's secrets feature)
file_env() {
local var="$1"
local fileVar="${var}_FILE"
local def="${2:-}"
if [ "${!var:-}" ] && [ "${!fileVar:-}" ]; then
echo >&2 "error: both $var and $fileVar are set (but are exclusive)"
exit 1
fi
local val="$def"
if [ "${!var:-}" ]; then
val="${!var}"
elif [ "${!fileVar:-}" ]; then
val="$(< "${!fileVar}")"
fi
export "$var"="$val"
unset "$fileVar"
}