我是CI的新手,对CI控制器有疑问,我有一个页面控制器,它是一个索引,用于在视图中加载页眉,页脚和所有页面,如下所示:
class Pages extends CI_Controller{
function __construct() {
parent::__construct();
$this->load->helper(array('url', 'form', 'captcha'));
$this->load->model('getdb');
$this->load->library('javascript');
$this->load->library('session');
}
public function index($page='home'){
if(!file_exists('application/views/pages/'.$page.'.php')){
show_404();
}
$data['title'] = ucfirst($page);
$data['sitename'] = $this->config->item('site_name');
$data['library_src'] = $this->jquery->script();
$data['script_head'] = $this->jquery->_compile();
$data['results'] = $this->getdb->getAll();
$this->load->view('templates/header', $data);
$this->load->view('inc/mainmenu', $data);
$this->load->view('pages/'.$page, $data);
$this->load->view('pages/sidebar', $data);
$this->load->view('templates/footer', $data);
}
}
然后我在表单中建立了一个使用验证码库的注册表,我找到了一个验证码控制器示例如下:
class Captcha extends CI_Controller {
public function index()
{
$this->load->library('session');
$this->load->helper(array('captcha','url'));
if ($this->input->post() && ($this->input->post('secutity_code') == $this->session->userdata('mycaptcha'))) {
$this->load->view('process.php');
}
else
{
$this->load->helper('captcha');
$vals = array(
'img_path' => './assets/captcha/',
'img_url' => base_url().'captcha/',
'font_path' => './assets/styles/fonts/MyriadPro-Semibold.ttf',
'img_width' => '200',
'img_height' => '30',
'expiration' => 3600
);
$cap = create_captcha($vals);
$data['image'] = $cap['image'];
$this->session->set_userdata('mycaptcha', $cap['word']);
$this->load->view('pages/register.php', $data);
}
}
}
这是我的名为register.php的视图:
<div id="content-wrap">
<form method="post" action="<?php echo base_url()?>">
<p><?php echo $image ?></p>
<p>Security: <input type="text" name="secutity_code"></p>
<p><input type="submit" name="submit" value="submit" /></p>
</form>
</div>
我的问题是,当我调用url http://site.com/ci/register
页面时,如何将Captcha控制器加载到Pages控制器中以便处理该函数?目前该页面将显示如下错误:
A PHP Error was encountered
Severity: Notice
Message: Undefined variable: image
Filename: pages/register.php
Line Number: 65
请指教,谢谢。
答案 0 :(得分:0)
当您调用pages
控制器时,capcha
控制器没有调用,而不是将其用作控制器使其成为库,
将其加载到“页面”控制器中。
$this->load->library('Captcha');
然后从您的captcha
控制器
pages
库
$data['image'] = $this->captcha->index();
现在captcha
库看起来像这样。
class Captcha {
public function __construct()
{
$this->ci =& get_instance();
}
public function index()
{
$this->ci->load->library('session');
$this->ci->load->helper(array('captcha','url'));
if ($this->ci->input->post() && ($this->ci->input->post('secutity_code') == $this->ci->session->userdata('mycaptcha'))) {
$this->ci->load->view('process.php');
}
else
{
$this->ci->load->helper('captcha');
$vals = array(
'img_path' => './assets/captcha/',
'img_url' => base_url().'captcha/',
'font_path' => './assets/styles/fonts/MyriadPro-Semibold.ttf',
'img_width' => '200',
'img_height' => '30',
'expiration' => 3600
);
$cap = $this->create_captcha($vals);
$this->ci->session->set_userdata('mycaptcha', $cap['word']);
return $cap['image'];
}
}
}
希望这会有所帮助。
更新
我的错误
使用
$cap = create_captcha($vals);
而不是
$cap = $this->create_captcha($vals);
答案 1 :(得分:-1)
看起来您已将error_logging设置为最高级别 你得到的错误信息只是一个'通知' - 它不值得担心。
有关详细信息,请参阅此处 - http://ellislab.com/codeigniter/user-guide/general/errors.html
但是,看起来你的控制器中还没有“注册”功能 - 如果你想要触发这个网址,你需要一个名为register的函数来做你想做的事。
希望我的答案是正确的或有帮助的,因为这是我在Stack上的第一个答案!!