你为什么不直接使用一个post_system
钩?它在最终页面发送到浏览器之后调用,这样您就可以正常加载视图,而无需回显它们。
这是一个示例控制器:
class Home extends Controller {
function index()
{
$this->move_audio = TRUE;
$this->old_folder = "/path/to/folder/";
$this->new_folder = "/path/to/folder2/";
$this->load->view("some_view");
}
}
还有一个示例钩子:
function post_system()
{
$CI =& get_instance();
if( isset($CI->move_audio) && $CI->move_audio === TRUE)
{
// Trim, then add trailing slash for consitency
$old_folder = rtrim($CI->old_folder, "/")."/*.mp3";
$new_folder = rtrim($CI->new_folder, "/")."/";
exec("mv {$old_folder} {$new_folder}");
}
}
查看钩子用户指南有关设置它们的信息。他们是你的朋友!
编辑:我刚刚想到的东西......
如果您只想在一个控制器方法中执行此操作...那么使用 Phil 的方法可能会更好。这将避免对每个请求进行钩子调用,如果您只需要一次,则这是不必要的。
如果你只需要一次,你可以做的另一件事是使用 CI_output()
控制器的处理程序(信息在这里)。那会像这样工作:
class Home extends Controller {
// Initalize the var to avoid having to
// check if it's set or not
var $move_audio = FALSE;
// CONTROLLER METHOD
function index()
{
$this->move_audio = TRUE;
$this->old_folder = "/path/to/folder/";
$this->new_folder = "/path/to/folder2/";
$this->load->view("some_view");
}
// OUTPUT HANDLER
function _output($output = "")
{
echo $output;
if($this->move_audio === TRUE)
{
// Trim, then add trailing slash for consitency
$old_folder = rtrim($this->old_folder, "/")."/*.mp3";
$new_folder = rtrim($this->new_folder, "/")."/";
exec("mv {$old_folder} {$new_folder}");
}
}
}