par
samsurr » 06 avr. 2011, 23:37
Merci Balistik pour tes infos, je penses être au final parvenu à avoir ce que je voulais, mais je suis de nouveau confronté à un problème, je me trouve dans l'impossibilité de valider mon formulaire avec le array $validate que j'ai intégré dans mon modèle, de plus je suis obligé de nommer mon champ "Assistance" au pluriel dans mon formulaire, est-ce un soucis de convention cake ou assistance n'est pas reconnu ?
Pour ma première question voici mes modèles, controlleurs et ma vue :
<?php
class ConversationsController extends AppController
{
var $name = 'Conversation';
var $uses = array('Conversation', 'Assistance');
function add()
{
if(isset($this->data))
{
$this->Conversation->set($this->data);
if($this->Conversation->validates())
{
$this->data = Sanitize::clean($this->data);
if($this->Conversation->saveAll($this->data)) // Inscription bdd réussie
{
debug($this->data);
} else {
$this->Session->setFlash("Une erreur s'est produite lors de l'ajout dans la base de données.");
}
} else {
$this->Session->setFlash("Veuillez corriger les erreurs du formulaire.");
$this->validateErrors($this->Conversation); // Erreur dans le formulaire, réaffichage
}
}
$this->set('errors', $this->Conversation->validationErrors);
}
}
<?php
class Assistance extends AppModel {
var $name = 'Assistance';
var $belongsTo = array(
'Users' => array(
'className' => 'Users',
'foreignKey' => 'user_id',
'conditions' => '',
'fields' => '',
'order' => ''
)
);
var $hasMany = array(
'Conversations' => array(
'className' => 'Conversations',
'foreignKey' => 'assistances_id',
'conditions' => '',
'fields' => '',
'order' => ''
)
);
var $_schema = array(
"about" => array(
"type" => "string",
"length" => 255
),
"knowledge" => array(
"type" => "select"
),
"priority" => array(
"type" => "select"
),
"message" => array(
"type" => "string",
"length" => 4000
)
);
var $validate = array(
"about" => array(
"notEmpty" => array(
"rule" => "notEmpty",
"message" => "Vous devez entrer un sujet pour votre demande."
),
"between" => array(
"rule" => array('between', 10, 255),
"message" => "Le sujet de votre demande doit contenir au minimum 10 caractères."
)
),
"message" => array(
"notEmpty" => array(
"rule" => "notEmpty",
"message" => "Le champ message ne doit pas rester vide."
),
"between" => array(
"rule" => array('between', 50, 4000),
"message" => "Votre message doit contenir 50 caractères minimum."
)
)
);
}
<?php
// Connecté, affichage du formulaire
echo "<h3>Formulaire de demande d'assistance</h3>";
echo $this->element('errors', array('errors' => $errors));
echo $this->Form->create('Conversations', array('action' => 'add'));
echo $this->Form->hidden('Assistances.users_id', array('value' => $session->read('Auth.User.id')));
echo $this->Form->hidden('Conversation.users_id', array('value' => $session->read('Auth.User.id')));
echo $this->Form->input('Assistances.about', array('label' => 'Sujet de la demande', 'error' => false));
echo $html->tag('label', 'Vos connaissances', array('for' => 'UserKnowledge'));
$options_list_connaissances = array('nulles' => 'Nulles', 'faibles' => 'Faibles', 'moyennes' => 'Moyennes', 'bonnes' => 'Bonnes', 'conséquentes' => 'Conséquentes');
echo $this->Form->select('Assistances.knowledge', $options_list_connaissances, "moyennes", array("empty" => false));
echo $html->tag('br');
echo $html->tag('label', 'Priorité de la demande', array('for' => 'UserPriority'));
$options_list_priorite = array('sansimportance' => 'Sans importance', 'faible' => 'Faible', 'moyenne' => 'Moyenne', 'urgente' => 'Urgente');
echo $this->Form->select('Assistances.priority', $options_list_priorite, "sansimportance", array("empty" => false));
echo $html->tag('br');
echo $html->tag('label', 'Votre demande', array('for' => 'UserMessage'));
echo $html->tag('br');
echo $this->Form->textarea('Assistances.message', array("rows" => 8, "cols" => 60));
echo $this->Form->end('Envoyer ma demande');
?>
Merci Balistik pour tes infos, je penses être au final parvenu à avoir ce que je voulais, mais je suis de nouveau confronté à un problème, je me trouve dans l'impossibilité de valider mon formulaire avec le array $validate que j'ai intégré dans mon modèle, de plus je suis obligé de nommer mon champ "Assistance" au pluriel dans mon formulaire, est-ce un soucis de convention cake ou assistance n'est pas reconnu ?
Pour ma première question voici mes modèles, controlleurs et ma vue :
[php]
<?php
class ConversationsController extends AppController
{
var $name = 'Conversation';
var $uses = array('Conversation', 'Assistance');
function add()
{
if(isset($this->data))
{
$this->Conversation->set($this->data);
if($this->Conversation->validates())
{
$this->data = Sanitize::clean($this->data);
if($this->Conversation->saveAll($this->data)) // Inscription bdd réussie
{
debug($this->data);
} else {
$this->Session->setFlash("Une erreur s'est produite lors de l'ajout dans la base de données.");
}
} else {
$this->Session->setFlash("Veuillez corriger les erreurs du formulaire.");
$this->validateErrors($this->Conversation); // Erreur dans le formulaire, réaffichage
}
}
$this->set('errors', $this->Conversation->validationErrors);
}
}
[/php]
[php]
<?php
class Assistance extends AppModel {
var $name = 'Assistance';
var $belongsTo = array(
'Users' => array(
'className' => 'Users',
'foreignKey' => 'user_id',
'conditions' => '',
'fields' => '',
'order' => ''
)
);
var $hasMany = array(
'Conversations' => array(
'className' => 'Conversations',
'foreignKey' => 'assistances_id',
'conditions' => '',
'fields' => '',
'order' => ''
)
);
var $_schema = array(
"about" => array(
"type" => "string",
"length" => 255
),
"knowledge" => array(
"type" => "select"
),
"priority" => array(
"type" => "select"
),
"message" => array(
"type" => "string",
"length" => 4000
)
);
var $validate = array(
"about" => array(
"notEmpty" => array(
"rule" => "notEmpty",
"message" => "Vous devez entrer un sujet pour votre demande."
),
"between" => array(
"rule" => array('between', 10, 255),
"message" => "Le sujet de votre demande doit contenir au minimum 10 caractères."
)
),
"message" => array(
"notEmpty" => array(
"rule" => "notEmpty",
"message" => "Le champ message ne doit pas rester vide."
),
"between" => array(
"rule" => array('between', 50, 4000),
"message" => "Votre message doit contenir 50 caractères minimum."
)
)
);
}
[/php]
[php]<?php
// Connecté, affichage du formulaire
echo "<h3>Formulaire de demande d'assistance</h3>";
echo $this->element('errors', array('errors' => $errors));
echo $this->Form->create('Conversations', array('action' => 'add'));
echo $this->Form->hidden('Assistances.users_id', array('value' => $session->read('Auth.User.id')));
echo $this->Form->hidden('Conversation.users_id', array('value' => $session->read('Auth.User.id')));
echo $this->Form->input('Assistances.about', array('label' => 'Sujet de la demande', 'error' => false));
echo $html->tag('label', 'Vos connaissances', array('for' => 'UserKnowledge'));
$options_list_connaissances = array('nulles' => 'Nulles', 'faibles' => 'Faibles', 'moyennes' => 'Moyennes', 'bonnes' => 'Bonnes', 'conséquentes' => 'Conséquentes');
echo $this->Form->select('Assistances.knowledge', $options_list_connaissances, "moyennes", array("empty" => false));
echo $html->tag('br');
echo $html->tag('label', 'Priorité de la demande', array('for' => 'UserPriority'));
$options_list_priorite = array('sansimportance' => 'Sans importance', 'faible' => 'Faible', 'moyenne' => 'Moyenne', 'urgente' => 'Urgente');
echo $this->Form->select('Assistances.priority', $options_list_priorite, "sansimportance", array("empty" => false));
echo $html->tag('br');
echo $html->tag('label', 'Votre demande', array('for' => 'UserMessage'));
echo $html->tag('br');
echo $this->Form->textarea('Assistances.message', array("rows" => 8, "cols" => 60));
echo $this->Form->end('Envoyer ma demande');
?>[/php]