1

仕事のプロジェクトで Codeigniter を使い始めましたが、まだコツをつかんでいます...

Codeigniter のチュートリアルを見て、ビューを処理するコントローラーを 1 つだけ使用して Web サイトの構築を開始しましたが、今ではそのコントローラーでフォームの送信を処理できません。私はここで私の心を失っています... :P

これはコントローラーの唯一の機能です (pages.php)

    public function view($page = 'home')
    {

        if ( ! file_exists('application/views/pages/'.$page.'.php'))
        {
            // Whoops, we don't have a page for that!
            show_404();
        }

        // handle ACTIVE class
        $current_page = uri_string();

        $this->Mp->isactiveset($this->session->userdata('active'),$current_page);
        $this->Mp->newactive($this->session->userdata('active'),$current_page);

        // testing database query and passing variables
        $passar = $this->Mp->testedb();

        // get ap types
        $aptype = $this->Mp->getaptype();

        // passing data to view
        $data['estado'] = $passar; // Testing db connection
        $data['title'] = ucfirst($page); // Homepage page
        $data['aptypes'] = $aptype; // Ap types


        $this->load->view('templates/header', $data);
        $this->load->view('pages/'.$page, $data);
        $this->load->view('templates/footer', $data);

    }

準備されたフォームを処理する機能があります

    public function index()
    {
    $this->form_validation->set_rules('nome', 'Username', 'required|min_length[3]|max_length[25]|');
    $this->form_validation->set_rules('telemovel', 'Telephone', 'numeric|exact_length[9]');
    $this->form_validation->set_rules('email', 'Email', 'required|valid_email');
    $this->form_validation->set_rules('mensagem', 'MessageBody', 'required|min_length[10]');

    if ($this->form_validation->run() == FALSE)
    {

        // handle ACTIVE class
        $current_page = uri_string();

        $this->Mp->isactiveset($this->session->userdata('active'),$current_page);
        $this->Mp->newactive($this->session->userdata('active'),$current_page);

        // get ap types
        $aptype = $this->Mp->getaptype();

        // testing database query and passing variables
        $passar = $this->Mp->testedb();

        // passing data to view
        $data['estado'] = $passar; // Testing db connection
        $data['aptypes'] = $aptype; // Ap types


        $this->load->view('templates/header', $data);
        $this->load->view('pages/home', $data);
        $this->load->view('templates/footer', $data);
    }
    else
    {   
        $this->load->view('templates/header', $data);
        $this->load->view('pages/submit', $data);
        $this->load->view('templates/footer', $data);
    }
}

これはroute.phpがどのように見えるかです(最初の答えの後、これが関連していることがわかります)

$route['default_controller'] = "pages/view";
$route['(:any)'] = 'pages/view/$1';
$route['(\w{2})/(.*)'] = '$2';
$route['(\w{2})'] = $route['default_controller'];
$route['404_override'] = '';

ビューで form_open('submit', $attributes) を実行すると、ビュー以外のコントローラーの関数内には入りません。明らかに、pages.php にフォーム処理関数を配置し、何度も名前を変更し、別のフォーム送信ページを試しました (form_open('pages that I try', $attributes))。フォームの送信を処理するために特定の関数に移動するにはどうすればよいですか?

4

2 に答える 2

0

私はそれを理解しました!私を正しい方向に向けてくれたSvetlioに感謝します。これが私がそれをした方法です:

1)フォームの初期化でパスを正しく設定します。

echo form_open('contactos/submit', $attributes); 

2)ルート構成(application / config /ルート.php)に移動し、このファイルにルート例外を追加します

$route['contactos/submit'] = "pages/submit";

これは、プログラムがパス'contactos / submit'を要求されると、pages.phpコントローラーの関数submitを指します(これが私が探していたものです...)

3)フォームの送信を正しく処理するために、コントローラーで関数送信を定義します

public function submit()
{
/* handle the form code */
    }
于 2012-10-26T19:56:39.240 に答える
0
form_open('submit', $attributes) 

でなければなりません

form_open('/path_to_my_page', $attributes) 

私があなたを正しく理解していれば...

form_open('/view/page', $attributes) 
于 2012-10-26T10:12:44.090 に答える