我对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?
答案 0 :(得分:0)
好的,我发现了怎么做。我使用了Saving Related Model Data方法。我只是根据所创建用户的类型,从表单发送的数据中使用我想要的信息。我离开了视野,模特没有动过。我只更改了group_id为2(普通用户)和3(半管理员用户)时的控制器。使用模型关系和发送的信息,我可以使用每个模型的save()方法,具体取决于我给出的信息。这是代码我希望它可以帮助某人:
$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->save($this->request->data['User'])) {
//Obtener el Id de user guardado
$userId = $this->User->id;
$this->request->data['Buyer']['user_id'] = $userId;
$this->request->data['Provider'] = $this->request->data['Buyer'];
if ($this->User->Buyer->save($this->request->data['Buyer']) && $this->User->Provider->save($this->request->data['Provider'])){
$this->Session->setFlash(__('The user has been saved.'));
return $this->redirect(array('action' => 'register'));
} else {
$this->Session->setFlash(__('The Buyer or Provider could not be saved. Please, try again.'));
}
} 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){
/*echo print_r($this->request->data);
return false;*/
$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;
}
}
//Save the user
$this->request->data['User']['created_ip_connection'] = $this->request->clientIp();
$this->request->data['User']['last_ip_connection'] = $this->request->clientIp();
if ($this->User->save($this->request->data['User'])) {
//Get the id of the user I just saved
$userId = $this->User->id;
if ($this->User->Company->Address->save($this->request->data["Address"])) {
$addressId = $this->User->Company->Address->id;
$this->request->data['Company']['user_id'] = $userId;
$this->request->data['Company']['address_id'] = $addressId;
$this->request->data['Company']['permision'] = true;
if ($this->User->Company->save($this->request->data["Company"])) {
$companyId = $this->User->Company->id;
$this->request->data['Buyer']['user_id'] = $userId;
$this->request->data['Buyer']['company_id'] = $companyId;
$this->request->data['Provider'] = $this->request->data['Buyer'];
if ($this->User->Buyer->save($this->request->data['Buyer']) && $this->User->Provider->save($this->request->data['Provider'])){
$this->Session->setFlash(__('The user has been saved.'));
return $this->redirect(array('action' => 'register'));
} else {
$this->Session->setFlash(__('The Buyer or Provider could not be saved. Please, try again.'));
}
} else {
$this->Session->setFlash(__('The company could not be saved. Please, try again.'));
}
} else {
$this->Session->setFlash(__('The Address could not be saved. Please, try again.'));
}
} else {
$this->Session->setFlash(__('The user could not be saved. Please, try again.'));
}
//now do the save
//$this->products->save($this->data) ;
}
}
/*$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'));