表单行动的最佳方式?

时间:2015-09-03 01:30:31

标签: php forms codeigniter oop model-view-controller

我刚开始使用Code Igniter框架,并且刚开始学习PHP OOP。我在编写表格时遇到了一些问题。

如果我有两个可以导致不同页面的按钮,那么最适合的方法是什么?我找到了两种方法。第一个是动态动作/链接,我们称之为方法A:

方法A

变量$ form_link是'form_link'。

(查看)main_user_view.php

<?php echo form_open($form_link); ?>
<?php echo form_button($add_user_button); ?>
<?php echo form_button($delete_user_button); ?>
<?php echo form_close(); ?>

(Controller)User.php

public function form_link()
{   
    // Value of button clicked
    $form_submitted = $this->input->post('submit_form'); 

    if($form_submitted == 'add_user')
    {
        redirect('User/add_user');
    }
    elseif($form_submitted == 'delete_user')
    {
        redirect('User/delete_user');
    }
    elseif($form_submitted == 'back')
    {
        redirect('User');
    }
}

另一种方式是不使用第二个按钮而是使用锚点并为其创建绝对路径。

方法B

变量$ form_link是'add_user',它是控制器中的一个函数。

(查看)main_user_view.php

<?php echo form_open($form_link); ?>
<?php echo form_button($add_user_button); ?>
<?php echo anchor('add_delete_user/delete_users_view', 'Delete', array('class'=>'btn btn-info', 'role'=>'button'));?>
<?php echo form_close(); ?>

我对方法A的唯一问题是,如果在表单中我有输入字段,我无法通过POST获取数据,因为redirect不会将数据转移到其他函数。我通过使用方法B解决了这个问题,其中锚点将导致我想要的函数,从而可以得到POST数据。

所以我的主要问题是,每当我在表单中有两个或更多按钮时,我应该使用方法B吗?

2 个答案:

答案 0 :(得分:1)

您必须使用按钮名称进行表单发布操作,

public function form_link()
{   
    if($this->input->post('add_user'))
    {
        redirect('User/add_user');
    }
    if($this->input->post('delete_user'))
    {
        redirect('User/delete_user');
    }
}

答案 1 :(得分:0)

我的意见是使用方法B.为了使URL更好,您可以使用自定义路由(位于“application/config/routes.php”)