これは少し奇妙かもしれませんが、説明しようと思います。基本的に、ユーザーを含むテーブルと顧客を含むテーブルがあります。ユーザーは、特定の顧客のデータのみを調べる権限を持っています。そこで、ユーザー ID と顧客 ID を外部キーとして取り、顧客/ユーザー許可ごとに 1 つの行を持つ、ユーザー許可用の別のテーブルを作成することにしました。
管理者が Zend\Form を使用する UserForm というクラスを使用してデータベースに新しいユーザーを追加するとき (参照用に以下に短縮して掲載)、追加するために選択できるボタンとしてフォームの横にすべての顧客も表示したいパーミッションとして。ここで、顧客 ID が選択/選択解除された場合に顧客 ID を追加または削除する JavaScript 配列を用意し、その配列を非表示の値としてフォームに渡し、最後に配列をループして行を配列内の各顧客 ID の権限テーブル、および作成されたユーザー ID も取得します。これが最善の方法かどうかはわかりませんが、私が思いついた最善の方法です。
少なくとも少しは理解できることを願っています。したがって、フォームは 1 つですが、2 つの異なるテーブルに挿入したいと考えています。私の質問は、どうすれば配列を値としてフォームに渡すことができるのでしょうか? また、saveUser() メソッドが呼び出されたときに、users テーブルだけでなく権限テーブルにも挿入するにはどうすればよいですか (以下にも投稿します)。また、これは私が不必要に難しいことをしている本当に奇妙な方法ですか? もっと簡単な方法があれば教えていただきたいです。
私の 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() メソッド
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');
}
}
}