2012-12-18 54 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!