Bonjour à tous,
Bon je bloque encore :( Mes règles de validation fonctionnent mais aucune erreur n'apparait.
J'ai fait un debug de $this->validationErrors qui effectivemment renvoi toujours null.
J'ai bien fait gaffe à ce que mon beforeSave renvoi true.
Je n'ai pas d'éventuelle redirection qui viderais mon validationErrors (J'ai lu ça sur internet).
Et voici mon code :
Modèle
public $validate = array(
'name' => array(
array(
'rule' => 'alphanumeric',
'required' => true,
'allowEmpty' => false,
'message' => "Votre titre n'est pas valide"
)
),
'description' => array(
array(
'rule' => 'alphanumeric',
'required' => true,
'allowEmpty' => false,
'message' => "Votre description n'est pas valide"
)
)
);
Contrôleur:
public function add(){
if ($this->request->is('post')) {
// On défini l'utilisateur de l'évènement
$this->request->data['user_id'] = $this->Auth->user(['id']);
// On scinde la date globale pour avoir la date de début et la date de fin
$this->request->data['date_debut'] = substr($this->request->data['dates'], 0, 19);
$this->request->data['date_fin'] = substr($this->request->data['dates'], 24, 20);
// Création de l'évènement en base de données
$this->Evenement->create();
if ($this->Evenement->save($this->request->data, true)) {
$this->Session->setFlash(__('Votre évènement à bien été créé.'));
//return $this->redirect(array('action' => 'index'));
}
$this->Session->setFlash(__('Impossible d\'ajouter l\'évènement.'));
}
debug($this->validationErrors);
}
et ma vue classiquement un formulaire à l'aide du helper.
J'ai remarqué que sur mon formulaire de connexion je n'ai pas d'erreurs non plus.. Donc j'imagine que j'ai la même erreur des deux côtés mais je ne voit pas trop quoi ..
En vous remerciant fortement les amis !
Bryan.
Je pense avoir trouvé :
<?php echo $this->form->create('Evenement'); ?>
Doit être remplacé par :
<?php echo $this->Form->create('Evenement'); ?>
Chez moi quand je le laisse le f
de form en minuscule les erreurs ne s'affichent pas, mais s'il est en majuscule j'ai bien les erreurs qui s'affichent.
Bon alors,
En faisant un debug($this->Evenement->validationErrors); j'ai bien les messages d'erreurs. Mais rien ne s'affiche dans la vue :(
Salut,
est-ce que tu affiches bien les erreurs dans ta vue ?
Avec :
$this->Session->flash()
Salut :)
Oui j'ai bien l'affichage des flash mais ce sont les erreurs de validation que je n'arrive pas à obtenir. Quand je fait un debug de validationErrors j'ai bien les erreurs qui sont créées mais elle ne s'affiche pas dans la vue ..
Re,
Ok, je vais essayé de reproduire ton erreur :
Merci :)
Alors,
add.ctp
<?php $this->Html->css(array(
'/css/plugins/daterangepicker/daterangepicker-bs3.css',
'/css/plugins/timepicker/bootstrap-timepicker.min.css'), null, array('inline' => false)); ?>
<!-- Content Header (Page header) -->
<section class="content-header">
<h1>
Calendrier
<small>Ajouter un évènement</small>
</h1>
<ol class="breadcrumb">
<li><a href="<?= $this->Html->url(array('controller' => 'Accueil', 'action' => 'index')); ?>"><i class="fa fa-dashboard"></i> Home</a></li>
<li class="active"><a href="#">Ajouter un évènement</a></li>
</ol>
</section>
<!-- Main content -->
<section class="content">
<div class="row">
<div class="col-xs-12">
<!-- general form elements -->
<div class="box box-primary">
<div class="box-header with-border">
<h3 class="box-title">Ajoutez des évènements à votre calendrier</h3>
</div><!-- /.box-header -->
<!-- Information -->
<div class="alert alert-warning alert-dismissable">
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
<h4><i class="icon fa fa-warning"></i> Attention</h4>
attention.
</div>
<div class="alert alert-info alert-dismissable">
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
<h4><i class="icon fa fa-info"></i>Information</h4>
info.
</div>
<!-- form start -->
<?php echo $this->form->create('Evenement'); ?>
<div class="box-body">
<!-- Date input-->
<div class="form-group">
<label>Période de l'évènement</label> (Attention aux horaires)
<div class="input-group">
<div class="input-group-addon">
<i class="fa fa-clock-o"></i>
</div>
<input type="text" name="dates" class="form-control pull-right" id="reservationtime"/>
</div>
<!-- /.input group -->
</br>
<!-- Titre input-->
<?= $this->Form->input('name', array(
'div' => 'form-group',
'class' => 'form-control',
'placeholder' => 'Titre de l\'évènement',
'label' => 'Titre')); ?>
<!-- Description input-->
<?= $this->Form->input('description', array(
'div' => 'form-group',
'class' => 'form-control',
'placeholder' => 'Description de l\'évènement ...',
'label' => 'Description',
'type' => 'textarea')); ?>
</div><!-- /.box-body -->
<!-- Submit form -->
<?= $this->Form->end(array(
'label' => 'Ajouter au calendrier',
'class' => 'btn btn-primary',
'div' => 'box-footer')); ?>
</form>
</div><!-- /.box -->
</div><!-- /.col -->
</div><!-- /.row -->
</section><!-- /.content -->
<?php $this->Html->script('https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.10.2/moment.min.js',array('inline' => false)); ?>
<?php $this->Html->script('plugins/daterangepicker/daterangepicker.js',array('inline' => false)); ?>
<?php $this->Html->script('plugins/timepicker/bootstrap-timepicker.min.js',array('inline' => false)); ?>
<?= $this->Html->scriptStart($options = array('inline'=>false)); ?>
moment.locale('fr', {
months : "janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),
monthsShort : "janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),
weekdays : "dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),
weekdaysShort : "dim._lun._mar._mer._jeu._ven._sam.".split("_"),
weekdaysMin : "Di_Lu_Ma_Me_Je_Ve_Sa".split("_"),
longDateFormat : {
LT : "HH:mm",
LTS : "HH:mm:ss",
L : "DD/MM/YYYY",
LL : "D MMMM YYYY",
LLL : "D MMMM YYYY LT",
LLLL : "dddd D MMMM YYYY LT"
},
calendar : {
sameDay: "[Aujourd'hui à] LT",
nextDay: '[Demain à] LT',
nextWeek: 'dddd [à] LT',
lastDay: '[Hier à] LT',
lastWeek: 'dddd [dernier à] LT',
sameElse: 'L'
},
relativeTime : {
future : "dans %s",
past : "il y a %s",
s : "quelques secondes",
m : "une minute",
mm : "%d minutes",
h : "une heure",
hh : "%d heures",
d : "un jour",
dd : "%d jours",
M : "un mois",
MM : "%d mois",
y : "une année",
yy : "%d années"
},
ordinalParse : /\d{1,2}(er|ème)/,
ordinal : function (number) {
return number + (number === 1 ? 'er' : 'ème');
},
meridiemParse: /PD|MD/,
isPM: function (input) {
return input.charAt(0) === 'M';
},
// in case the meridiem units are not separated around 12, then implement
// this function (look at locale/id.js for an example)
// meridiemHour : function (hour, meridiem) {
// return /* 0-23 hour, given meridiem token and hour 1-12 */
// },
meridiem : function (hours, minutes, isLower) {
return hours < 12 ? 'PD' : 'MD';
},
week : {
dow : 1, // Monday is the first day of the week.
doy : 4 // The week that contains Jan 4th is the first week of the year.
}
});
$(function () {
//Date range picker
$('#reservation').daterangepicker();
//Date range picker with time picker
$('#reservationtime').daterangepicker({timePicker: true, timePickerIncrement: 1, format: 'YYYY-MM-DD h:mm:ss A'});
//Date range as a button
$('#daterange-btn').daterangepicker(
{
ranges: {
'Today': [moment(), moment()],
'Yesterday': [moment().subtract(1, 'days'), moment().subtract(1, 'days')],
'Last 7 Days': [moment().subtract(6, 'days'), moment()],
'Last 30 Days': [moment().subtract(29, 'days'), moment()],
'This Month': [moment().startOf('month'), moment().endOf('month')],
'Last Month': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')]
},
startDate: moment().subtract(29, 'days'),
endDate: moment()
},
function (start, end) {
$('#reportrange span').html(start.format('YYYY, MMMM D') + ' - ' + end.format('MMMM D, YYYY'));
}
);
//iCheck for checkbox and radio inputs
$('input[type="checkbox"].minimal, input[type="radio"].minimal').iCheck({
checkboxClass: 'icheckbox_minimal-blue',
radioClass: 'iradio_minimal-blue'
});
//Red color scheme for iCheck
$('input[type="checkbox"].minimal-red, input[type="radio"].minimal-red').iCheck({
checkboxClass: 'icheckbox_minimal-red',
radioClass: 'iradio_minimal-red'
});
//Flat red color scheme for iCheck
$('input[type="checkbox"].flat-red, input[type="radio"].flat-red').iCheck({
checkboxClass: 'icheckbox_flat-green',
radioClass: 'iradio_flat-green'
});
//Colorpicker
$(".my-colorpicker1").colorpicker();
//color picker with addon
$(".my-colorpicker2").colorpicker();
//Timepicker
$(".timepicker").timepicker({
showInputs: false
});
});
<?= $this->Html->scriptEnd(); ?>
et le AppController
<?php
/**
* Application level Controller
*
* This file is application-wide controller file. You can put all
* application-wide controller-related methods here.
*
* CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
* Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
*
* Licensed under The MIT License
* For full copyright and license information, please see the LICENSE.txt
* Redistributions of files must retain the above copyright notice.
*
* @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
* @link http://cakephp.org CakePHP(tm) Project
* @package app.Controller
* @since CakePHP(tm) v 0.2.9
* @license http://www.opensource.org/licenses/mit-license.php MIT License
*/
App::uses('Controller', 'Controller');
/**
* Application Controller
*
* Add your application-wide methods in the class below, your controllers
* will inherit them.
*
* @package app.Controller
* @link http://book.cakephp.org/2.0/en/controllers.html#the-app-controller
*/
class AppController extends Controller {
public $components = array( 'Session',
'Cookie',
'Auth' => array(
'authenticate' => array(
'Form' => array(
'scope' => array('User.active' => true)
)
),
'authorize' => array('Controller'),
'loginRedirect' => array('controller' => 'Accueil', 'action' => 'index'),
'logoutRedirect' => array('controller' => 'Users', 'action' => 'logout')
)
);
public function isAuthorized($user = null) {
return false;
}
public $helpers = array('Html', 'Form', 'Session');
/**
* beforeFilter callback
*
* @return void
*/
public function beforeFilter() {
parent::beforeFilter();
if($this->Auth->user(['id']))
{
$idauth = $this->Auth->user(['id']);
/**
* Déclaration des informations de l'utilisateur
*/
$infos_user = $this->Auth->user();
$this->set('infos_user',$infos_user);
/**
* Déclaration de la liste des évènements en cours
*/
$this->loadModel('Evenement');
$today = new DateTime();
$req_events = $this->Evenement->find('all', Array(
'conditions' => array(
'Evenement.user_id' => $idauth,
'Evenement.type_evenement' => '1',
'Evenement.date_debut >' => $today->format('Y-m-d H:i:s')
)
)
);
$this->set('Events_in_progress',$req_events);
/**
* Déclaration des messages reçus
*/
$this->loadModel('Mail');
$req_mails_recus = $this->Mail->find('all', Array(
'conditions' => array(
'Mail.destinataire_id' => $idauth
)
)
);
$this->set('Mails_recus',$req_mails_recus);
$req_mails_recus_non_lu = $this->Mail->find('all', Array(
'conditions' => array(
'Mail.destinataire_id' => $idauth,
'Mail.lu' => '1'
)
)
);
$this->set('Mails_recus_non_lu',$req_mails_recus_non_lu);
}
}
public static function temps_relatif($date) {
// Déduction de la date donnée à la date actuelle
$time = time() - strtotime($date);
// Calcule si le temps est passé ou à venir
if ($time > 0) {
$when = "il y a";
} else if ($time < 0) {
$when = "dans environ";
} else {
return "il y a moins d'une seconde";
}
$time = abs($time);
// Tableau des unités et de leurs valeurs en secondes
$times = array( 31104000 => 'an{s}', // 12 * 30 * 24 * 60 * 60 secondes
2592000 => 'mois', // 30 * 24 * 60 * 60 secondes
86400 => 'jour{s}', // 24 * 60 * 60 secondes
3600 => 'heure{s}', // 60 * 60 secondes
60 => 'minute{s}', // 60 secondes
1 => 'seconde{s}'); // 1 seconde
foreach ($times as $seconds => $unit) {
// Calcule le delta entre le temps et l'unité donnée
$delta = round($time / $seconds);
// Si le delta est supérieur à 1
if ($delta >= 1) {
// L'unité est au singulier ou au pluriel ?
if ($delta == 1) {
$unit = str_replace('{s}', '', $unit);
} else {
$unit = str_replace('{s}', 's', $unit);
}
// Retourne la chaine adéquate
return $when." ".$delta." ".$unit;
}
}
}
Pour ma version c'est cakePHP 2.7 :)
Merci beaucoup :)
Je suis en train d'essayer de reproduire l'erreur sans succès pour le moment, je continue. Mais au passage je pense à tes erreurs d'authentification qui ne s'affichent pas, si tu rajoutes ceci en haut de ton form de login (login.ctp)
<?php echo $this->Session->flash('auth'); ?>
Est-ce que ça fonctionne ?