【问题标题】:Codeigniter load captcha controller into index controllerCodeigniter 将验证码控制器加载到索引控制器中
【发布时间】:2012-12-05 07:50:32
【问题描述】:

我是 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

请指教,谢谢。

【问题讨论】:

  • 你叫哪个控制器'Pages'或'Captcha'???
  • @Kanishka Panamaldeniya,我默认调用 Pages 控制器,似乎验证码控制器根本不调用,每当我转到 url http://site.com/ci/register 时,变量 '$data['image']` 不能通过查看。
  • 是的,当您调用 pages 控制器时,您并没有调用 captha 控制器

标签: codeigniter controller captcha


【解决方案1】:

当您调用 pages 控制器时,capcha 控制器不会调用,而不是将其用作控制器,而是将其用作库,

将其加载到“页面”控制器中。

$this->load->library('Captcha');

然后从您的pages 控制器调用captcha

$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);

【讨论】:

  • 它返回Fatal error: Call to undefined method Captcha::create_captcha() in C:\xampp\htdocs\CI\application\libraries\Captcha.php on line 31
  • 我知道将所有验证码方法放入视图页面不是一个好习惯,还有其他方法来处理验证码助手吗?
  • 感谢@Kanishka Panamaldeniya,错误消失了,但验证码图像没有出现在我的表单中,需要找出其中的问题。
【解决方案2】:

您似乎在最高级别设置了 error_logging 您收到的错误消息只是一个“通知” - 不值得担心。

查看这里了解更多信息 - http://ellislab.com/codeigniter/user-guide/general/errors.html

但是,您的控制器中似乎也没有“注册”功能 - 如果您希望触发该 url,您将需要一个名为 register 的功能来执行您想要的操作。

希望我的回答是正确的或有帮助,因为这是我在 Stack 上的第一个回答!!

【讨论】:

    猜你喜欢
    • 2011-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多