【问题标题】:Codeigniter - Handling a form with only one controller for all pagesCodeigniter - 处理所有页面只有一个控制器的表单
【发布时间】:2012-10-26 09:57:57
【问题描述】:

我开始在一个工作项目中使用 Codeigniter,但我仍在掌握它的窍门......

浏览 Codeigniter 教程,我开始构建网站时只有一个控制器来处理视图,但现在我无法在该控制器上处理表单提交。我在这里失去了理智......: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('我试过的页面',$attributes))。如何让它转到特定的函数来处理表单提交?

【问题讨论】:

    标签: php codeigniter


    【解决方案1】:
    form_open('submit', $attributes) 
    

    必须是

    form_open('/path_to_my_page', $attributes) 
    

    如果我理解正确的话......

    form_open('/view/page', $attributes) 
    

    【讨论】:

    • 感谢您的回复,但它不会做我想要的。我想要 pages.php 控制器中的一个函数来处理提交。这没有在其中输入任何功能。这只是提交.php 视图,因此它只使用我的控制器上的“公共功能视图”功能。
    • 您是否为该提交功能制定了路线?
    • ?...不...我想。我是新来的,所以对我很赤裸裸。请问我怎样才能做到这一点?
    • 我做到了。只是在等待我允许回答我自己的问题之前打发时间。感谢@Svetlio 为我指出正确的方式
    【解决方案2】:

    我想通了!感谢 Svetlio 以正确的方式指出我。我是这样做的:

    1)在表单初始化中正确设置路径:

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

    2) 进入路由配置(application/config/routes.php),在这个文件中添加路由异常

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

    它的作用是,当程序被要求输入路径'contactos/submit'时,它指向pages.php控制器中的submit函数(即就是我要找的东西...)

    3) 在您的控制器中定义函数 submit,以正确处理表单的提交

    public function submit()
    {
    /* handle the form code */
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-04
      • 2017-06-25
      • 2015-12-28
      • 2015-11-01
      • 1970-01-01
      • 2011-02-24
      相关资源
      最近更新 更多