1

私は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>

http://site.com/ci/register私の問題は、URLページを呼び出すときに関数を処理するためにCaptchaコントローラーをPagesコントローラーにロードするにはどうすればよいですか?現在、ページには次のようなエラーが表示されます。

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

アドバイス、ありがとう。

4

2 に答える 2

1

コントローラを呼び出すときpagescapchaコントローラは呼び出していません。コントローラとして使用する代わりに、ライブラリにします。

'pages'コントローラーにロードします。

$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);
于 2012-12-18T06:55:47.047 に答える
-1

error_loggingが最高レベルに設定されているようです。表示されるエラーメッセージは「通知」のみです。心配する価値はありません。

詳細については、こちらをご覧ください-http://ellislab.com/codeigniter/user-guide/general/errors.html

ただし、コントローラーに「レジスター」関数がないようにも見えます。そのURLを起動したい場合は、レジスターと呼ばれる関数が必要になります。

スタックでの最初の答えなので、私の答えが正しいか役立つことを願っています!!

于 2012-12-18T06:25:20.443 に答える