Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 要在ZF2中使用一个表单插入到两个表中吗_Php_Forms_Zend Framework2 - Fatal编程技术网

Php 要在ZF2中使用一个表单插入到两个表中吗

Php 要在ZF2中使用一个表单插入到两个表中吗,php,forms,zend-framework2,Php,Forms,Zend Framework2,这可能有点奇怪,但我会尽力解释。基本上,我有一个包含用户的表和一个包含客户的表。用户只有权限查看特定客户的数据。所以我想我应该为用户权限创建一个单独的表,将用户ID和客户ID作为外键,每个客户/用户权限有一行 当管理员使用一个名为UserForm的类(下文简称为“发布以供参考”)将新用户添加到数据库中时(该类使用Zend\Form),我还希望将表单旁边的所有客户显示为按钮,可以选择将其添加为权限。现在,我想我应该使用一个JavaScript数组来添加或删除选中/取消选中的客户ID,然后将该数组作

这可能有点奇怪,但我会尽力解释。基本上,我有一个包含用户的表和一个包含客户的表。用户只有权限查看特定客户的数据。所以我想我应该为用户权限创建一个单独的表,将用户ID和客户ID作为外键,每个客户/用户权限有一行

当管理员使用一个名为UserForm的类(下文简称为“发布以供参考”)将新用户添加到数据库中时(该类使用Zend\Form),我还希望将表单旁边的所有客户显示为按钮,可以选择将其添加为权限。现在,我想我应该使用一个JavaScript数组来添加或删除选中/取消选中的客户ID,然后将该数组作为隐藏值传递给表单,最后在数组中循环,在数组中为每个客户ID的权限表中插入一行,并获取已创建的用户ID。我不确定这是否是最好的方法,但这是我能想到的最好的方法

希望这至少是可以理解的。所以,我有一个表单,但我想插入到两个不同的表中。我想,我的问题是如何将数组作为值传递给表单?当调用saveUser()方法时,我如何不仅插入users表,而且插入permissions表(我也将在下面发布)。还有,这真的是一种奇怪的方式吗,我对此感到不必要的困难?我很想知道是否有更简单的方法

我的UserForm类:

namespace Admin\Form;
use Zend\Form\Form;

class UserForm extends Form
{
public function __construct($name = null)
{
    parent::__construct('user');
    $this->setAttribute('method', 'post');
    $this->add(array(
        'name' => 'userId',
        'attributes' => array(
            'type'  => 'Hidden',
        ),
    ));

    $this->add(array(
        'name' => 'activated',
        'attributes' => array(
            'value' => 1,
            'type'  => 'Hidden',
        ),
    ));
    $this->add(array(
        'name' => 'username',
        'attributes' => array(
            'type'  => 'text',
        ),
        'options' => array(
            'label' => 'Username:',
        ),
    ));
    $this->add(array(
        'name' => 'firstname',
        'attributes' => array(
            'type'  => 'text',
        ),
        'options' => array(
            'label' => 'First name:',
        ),
    ));
    $this->add(array(
        'name' => 'lastname',
        'attributes' => array(
            'type'  => 'text',
        ),
        'options' => array(
            'label' => 'Last name:',
        ),
    ));
    $this->add(array(
        'name' => 'submit',
        'attributes' => array(
            'type'  => 'submit',
            'value' => 'Go',
            'id' => 'submitbutton',
        ),
    ));

}
}

我的saveUser()方法


一种方法是使用表单字段集。一个表单可以有多个字段集,并且每个字段集可以绑定到不同的实体

当实体之间存在一对一关系时,这些工具非常有用

然后,您将创建teo实体,例如一个用户实体(正如您已经拥有的)和一个新实体来表示您的权限

您将为每个字段创建一个Feildset,并将对象绑定到字段集。(例如UserFieldSet和PermissionFieldset)

签出表单字段集部分:

如果您有一对多关系,即一个用户可以拥有多个权限,那么您最好查看表单集合:


还有一个为一对多关系动态添加新行的示例。

一种方法是使用表单字段集。一个表单可以有多个字段集,并且每个字段集可以绑定到不同的实体

当实体之间存在一对一关系时,这些工具非常有用

然后,您将创建teo实体,例如一个用户实体(正如您已经拥有的)和一个新实体来表示您的权限

您将为每个字段创建一个Feildset,并将对象绑定到字段集。(例如UserFieldSet和PermissionFieldset)

签出表单字段集部分:

如果您有一对多关系,即一个用户可以拥有多个权限,那么您最好查看表单集合:


还有一个为一对多关系动态添加新行的示例。

这听起来对我的需求非常有帮助。我会尝试一下,然后回来告诉你事情的进展。这听起来对我的需要很有帮助。我会尝试一下,然后回来告诉你事情的进展。
public function saveUser(User $user)
{
    $data = array(
        'firstname'     => $user->firstname,
        'lastname'      => $user->lastname,
        'username'      => $user->username,
        'activated'     => $user->activated,
    );

    $userId = (int)$user->userId;
    if ($userId == 0) {
        $this->tableGateway->insert($data);
    } else {
        if ($this->getUser($userId)) {
            $this->tableGateway->update($data, array('userId' => $userId));
        } else {
            throw new \Exception('User ID does not exist');
        }
    }
}