0
对于cakephp来说相对较新,我试图使用saveall()并根据用户为寄存器选择的角色保存各个模型。CakePHP使用saveAll并指定仅限于哪些模型
这是我的观点:
<?php echo $this->Form->create('User', array('type' => 'file')); ?>
<fieldset>
<legend><?php echo __('Add User'); ?></legend>
<?php
echo $this->Form->file('User.user_image');
echo $this->Form->input('User.name', array('label' => 'Nombre'));
echo $this->Form->input('User.last_name', array('label' => 'Apellidos'));
echo $this->Form->input('User.email', array('label' => 'E-Mail'));
echo $this->Form->input('User.password', array('label' => 'Contraseña'));
echo $this->Form->input('User.phone', array('label' => 'Telefono'));
//echo $this->Form->input('created_ip_connection');
//echo $this->Form->input('last_ip_connection');
echo $this->Form->input('User.group_id', array('empty' => 'Elige un rol', 'label' => 'Rol de Usuario'));
?>
<div style="display: none;" id="companyAdd">
<legend><?php echo __('Datos de Compañia'); ?></legend>
<?php
echo $this->Form->input('Address.exterior_number', array('label' => 'Numero Exterior', 'required' => false));
echo $this->Form->input('Address.internal_number', array('label' => 'Numero Interior', 'required' => false));
echo $this->Form->input('Address.street', array('label' => 'Calle', 'required' => false));
echo $this->Form->input('Address.suburby', array('label' => 'Colonia', 'required' => false));
echo $this->Form->input('Address.country_id', array('empty' => 'Selecciona País', 'label' => 'Pais', 'required' => false));
echo $this->Form->input('Address.state_id', array('empty' => 'Selecciona País', 'label' => 'Estado', 'required' => false));
echo $this->Form->input('Address.city_id', array('empty' => 'Selecciona Estado', 'label' => 'Municipio', 'required' => false));
echo $this->Form->input('Company.name', array('label' => 'Nombre de Compañia', 'required' => false));
echo $this->Form->input('Company.description', array('label' => 'Descripción de Compañia', 'required' => false));
echo $this->Form->input('Company.bank_acc', array('label' => 'Cuenta de Banco', 'required' => false));
echo $this->Form->input('Company.rfc', array('label' => 'RFC', 'required' => false));
?>
</div>
<div style="display: none;" id="userAdd">
<legend><?php echo __('Datos de Comprador/Proveedor'); ?></legend>
<?php
echo $this->Form->input('Buyer.company_id', array('empty' => 'Elige Comapñia', 'label' => 'Compañia', 'required' => false));
?>
</div>
</fieldset>
<?php echo $this->Form->end(__('Registrar')); ?>
这里是我的控制器:
public function register(){
$this->layout = 'generalLayout';
if ($this->request->is('post')) {
if($this->request->data['User']['group_id'] == 1){
$this->User->create();
if(!empty($this->data))
{
//Check if image has been uploaded
if(!empty($this->data['User']['user_image']['name']))
{
$file = $this->data['User']['user_image']; //put the data into a var for easy use
$ext = substr(strtolower(strrchr($file['name'], '.')), 1); //get the extension
$arr_ext = array('jpg', 'jpeg', 'gif'); //set allowed extensions
//only process if the extension is valid
if(in_array($ext, $arr_ext))
{
//do the actual uploading of the file. First arg is the tmp name, second arg is
//where we are putting it
$destinationPath = 'images\users\\';
$randomCode = substr(md5(uniqid(rand(), true)), 5, 5);
$filename = $this->data['User']['name'].'_'.$randomCode."_".$file['name'];
move_uploaded_file($file['tmp_name'], WWW_ROOT . $destinationPath . $filename);
//prepare the filename for database entry
$this->request->data['User']['user_image'] = $filename;
}
}
$this->request->data['User']['created_ip_connection'] = $this->request->clientIp();
$this->request->data['User']['last_ip_connection'] = $this->request->clientIp();
if ($this->User->saveAll($this->request->data['User'])) {
$this->Session->setFlash(__('The user has been saved.'));
return $this->redirect(array('action' => 'register'));
} else {
$this->Session->setFlash(__('The user could not be saved. Please, try again.'));
}
//now do the save
//$this->products->save($this->data) ;
}
}
if($this->request->data['User']['group_id'] == 2){
$this->User->create();
if(!empty($this->data))
{
//Check if image has been uploaded
if(!empty($this->data['User']['user_image']['name']))
{
$file = $this->data['User']['user_image']; //put the data into a var for easy use
$ext = substr(strtolower(strrchr($file['name'], '.')), 1); //get the extension
$arr_ext = array('jpg', 'jpeg', 'gif'); //set allowed extensions
//only process if the extension is valid
if(in_array($ext, $arr_ext))
{
//do the actual uploading of the file. First arg is the tmp name, second arg is
//where we are putting it
$destinationPath = 'images\users\\';
$randomCode = substr(md5(uniqid(rand(), true)), 5, 5);
$filename = $this->data['User']['name'].'_'.$randomCode."_".$file['name'];
move_uploaded_file($file['tmp_name'], WWW_ROOT . $destinationPath . $filename);
//prepare the filename for database entry
$this->request->data['User']['user_image'] = $filename;
}
}
$this->request->data['User']['created_ip_connection'] = $this->request->clientIp();
$this->request->data['User']['last_ip_connection'] = $this->request->clientIp();
if ($this->User->saveAll($this->request->data)) {
$this->Session->setFlash(__('The user has been saved.'));
return $this->redirect(array('action' => 'register'));
} else {
$this->Session->setFlash(__('The user could not be saved. Please, try again.'));
}
//now do the save
//$this->products->save($this->data) ;
}
}
if($this->request->data['User']['group_id'] == 3){
$this->Session->setFlash(__('Group 3 Happened'));
return $this->redirect(array('action' => 'register'));
}
/*$this->Session->setFlash(__('Nothing Happened'));
return $this->redirect(array('action' => 'register'));*/
}
$groups = $this->User->Group->find('list');
$this->set(compact('groups'));
$companies = $this->User->Company->find('list');
$this->set(compact('companies'));
}
而且我的模型关系
public $hasOne = array(
'Buyer' => array(
'className' => 'Buyer',
'foreignKey' => 'user_id',
'conditions' => '',
'fields' => '',
'order' => ''
),
'Company' => array(
'className' => 'Company',
'foreignKey' => 'user_id',
'conditions' => '',
'fields' => '',
'order' => ''
),
'Provider' => array(
'className' => 'Provider',
'foreignKey' => 'user_id',
'conditions' => '',
'fields' => '',
'order' => ''
)
);
我想要么只发送所需的信息(意思模型取决于所选择的组)。通过窗体到控制器。或者在控制器中只使用发送的模型来保存我想要的模型。我怎么能做这个工作。 saveAll不起作用,因为我也通过表单发送没有信息的其他模型。我怎么能做这个工作?
另外如何获取我刚刚保存的用户的ID?
你有没有尝试删除你不'saveAll'-例如,'未设置($这个 - >请求 - >数据之前想要的信息['供应商'])'如果你不想提供者字段? – AgRizzo 2015-02-05 20:12:27
您还可以在调用saveAll之前解除模型绑定 – 2015-02-05 21:12:17