2012-12-18 80 views
0

我新到CI和怀疑即将CI控制器,我有一个网页控制器,其是一个索引,并使用加载页眉,页脚,并在视图中的所有的页面,如以下:笨负载的captcha控制器插入索引控制器

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> 

我的问题是,我怎么能使Captcha控制器加载到Pages控制器中,以便在我调用url http://site.com/ci/register页面时处理函数?目前该页面将显示如下错误:

A PHP Error was encountered 
Severity: Notice 
Message: Undefined variable: image 
Filename: pages/register.php 
Line Number: 65 

请指教,谢谢。

+0

哪个控制器是你叫 '页数' 和 '验证码' ??? –

+0

@Kanishka Panamaldeniya,默认情况下我称为Pages控制器,似乎Captcha控制器根本不会调用,无论何时我去url http:// site.com/ci/register',变量'$ data ['image' ]'不能通过查看。 – conmen

+0

yes当你调用pages controller时,你没有调用captha控制器 –

回答

0
当你打电话给 pages控制器

,该capcha控制器不调用,而不是使用它作为一个控制器,使其成为库,

负载它在“页”控制器。

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

然后从pages控制器

$data['image'] = $this->captcha->index(); 

现在captcha库看起来像这样打电话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']; 
    } 
} 
} 

希望这有助于。

UPDATE

我的错误的

使用

$cap = create_captcha($vals); 

代替

$cap = $this->create_captcha($vals); 
+0

它返回'致命错误:调用未定义方法Captcha :: create_captcha()在C:\ xampp \ htdocs \ CI \ application \ libraries \ Captcha.php上第31行' – conmen

+0

我知道将所有验证码方法放入视图页面并不是一个好习惯,还有其他方法可以处理验证码助手吗? – conmen

+0

你的create_captcha()函数在哪里?它是在capctha控制器 –

-1

它看起来像你有error_logging设置在最高水平 你收到的错误信息只是一个'通知' - 它不值得担心。

在这里看到更多的信息 - http://ellislab.com/codeigniter/user-guide/general/errors.html

但是,它也像你没有“注册”功能,在您的控制器 - 您将需要一个函数调用的寄存器,你想要做什么,如果你想要的网址发射。

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