Salut j'ai deux tables enseignement et cycle avec comme relation( enseignement hasmany cycle et cycle belongsto enseignement).
dans mon model Enseignement, j'ai ceci:

<?php 
class Enseignement extends AppModel
{
    public $name = 'Enseignement';
    public $hasMany = array(
            'Cycle' => array(

                'className'  =>  'Cycle',
                'foreignKey' =>  'enseignements_id',
                'order'      =>   'Cycle.created DESC',
                'fields'     =>   'nomcycle,description',

                'dependance' =>   true
                )

        );
    public $validate = array(

        'specialite' => array(
            'rule1'=>array('rule'=>'isUnique','message'=>'Cette specialite existe déja','last'=>false),
            'rule2'=>array('rule'=>array('minLength',4),
                'message'=>'Votre Pseudo doit contenir plus de 8 caractères'),
            'required' => array('rule' => array('notEmpty'),'message'=>'Un pseudo est requis'))

        );
}

?>

dans le model Cycle j'ai ceci:

<?php 
class Cycle extends AppModel
{
    public $name = 'Cycle';
    public $belongsTo = array(
        'Enseignement' => array(

                'className'  => 'Enseignement',
                'foreignKey' => 'enseignements_id',
                'fields'      => 'specialite'

            )

        );
    public $validate = array(
        'nomcycle' => array(

                'rule' => 'isUnique',
                'allowEmpty' =>false,
                 'message'    => 'Ce champ est déja utilisé'                

             ),
        'desciption' => array(

            'rule' => array('allowEmpty' =>false),
            'message' => 'Ce champ ne doit pas être vide'

            )

        );
}

?>

j'effectue bien mon crud avec le model enseignement par contre dans la vue pour ajouter un cycle j'ai ceci :


<?php  echo $this->set('title_for_layout','Ajout d\' cycle'); ?>

<div class="panel panel-primary">
<div class="panel-heading">
    <h3 class="panel-title">Enregistrement d'un cycle</h3>
  </div>
  <div class="panel-body">

                                    <?php echo $this->Form->create('Cycle'); ?>
          <div class="row">
                      <div class="col-lg-12">
                                  <div class="col-lg-12">
                                  <div class="col-lg-12 line-input">

                                                <?php

                                                echo $this->Form->input('enseignements_id', array('options' => $listenseignement));

                                                $this->Form->unlockField('enseignements_id');
                                                 ?>
                                            </div>
                                            <div class="col-lg-12 line-input">

                                                <?php

                                                echo $this->Form->input('nomcycle', array('label'=>'Nom du cycle &nbsp;&nbsp;','type' => 'text','class'=>'form-control','placeholder'=>'Entrer le cycle','required'=>true));

                                                 ?>
                                            </div>
                                            <div class="col-lg-10 line-input">

                                                <?php

                                                echo $this->Form->input('description', array('label'=>'Description &nbsp;&nbsp;','type' => 'text','class'=>'form-control','placeholder'=>'Entrer la description','required'=>true));

                                                 ?>
                                            </div>

                                            <div class="col-lg-10 line-input">
                                            <p >
                                                    <?php
                                                            echo $this->Form->button(' Sauvegarder', array('type'=>'submit','class'=>'btn btn-primary btn-submit glyphicon glyphicon-ok'));
                                                            echo $this->Form->button(' Annuler', array('type'=>'reset','class'=>'btn btn-default btn-reset glyphicon glyphicon-refresh')); 

                                                            echo $this->Form->end();

                                                    ?>
                                            </p>
                                            </div>

                                  </div>

                                  <div class="col-lg-6">
                                    <p class="navbar-text text-justify">
                                            <h1>Information</h1>
                                            Cette section vous permet de créer les types de poste.
                                            Toute les opérations éffectuées dans votre gestion tiendrons compte de ce type.
                                            comme exemple on pourait avoir type1 = 1 sequence, type2=2 sequence, etc....

                                    </p>
                                  </div>

                      </div>

          </div>

  </div>
  <div class="panel-footer"></div>
</div>

et dans mon controller j'ai ceci pour enregistrer dans la base de donnée:

public function addcycle()
    {

        $this->layout = 'default';

        $listenseignement = $this->Cycle->Enseignement->find('list', array('fields' => array('specialite')));
        $this->set(compact('listenseignement'));
        debug($listenseignement);

        if($this->request->is('post'))
        {
                    debug($validatePost);

                $this->Cycle->create();

            if($this->Cycle->save($this->request->data,true))
            {
                $this->Session->setFlash('Donner sauvegarder avec success','default',array('class'=>'alert alert-success'));
                debug($this->request->data);
                return $this->redirect(array('action' => 'index'));
            }

            $this->Session->setFlash('Erreur de sauvegarde, verifier vos informations','default',array('class'=>'alert alert-warning'));
        }

    }

dans mon appController j'ai ceci:

<?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');

class AppController extends Controller {
    public $helpers = array('Html','Form','Session');
    public $components = array('Session','Security' =>array(
            'csrfUseOnce' => false 

        ));
    /*public function beforeFilter()
    {
        //debug($this->request);
    }*/

}

lorsque je veus sauvegarder, cela me génère un trou noir je ne sais pas comment faire pour utiliser le componentsecurity dans une association belongsto

4 réponses


Bonjour.
Pour commencer, corriges le contenu de ton sujet.
Les commentaires de CakePHP, ne nous intéressent pas et ne nous aiderons pas.
Mets bien le code dans les contenus de code et le reste en dehors.
Les contenus du genre, titre de la page par exemple, ce n'est pas la peine non plus de nous le mettre.
Et donnes nous un code complet, car les trucs du genre :

Form->create('Cycle'); ?> Form->input('enseignements_id', array('options' => $listenseignement));

C'est comme si tu voulais que nous te donnions une solution à ton problème, mais en même temps, tu n'en a rien à faire.
Pour terminer, il n'y a pas de différence d'utilisation du composant Security, qu'il y ait des associations de models ou non.

romses
Auteur

ok je m'escuse c'est la première fois que j'entends parler des trous noir en programmation suis bouleversé . dans mon model Enseignement, j'ai ceci

<?php 
class Enseignement extends AppModel
{
    public $name = 'Enseignement';
    public $hasMany = array(
            'Cycle' => array(

                'className'  =>  'Cycle',
                'foreignKey' =>  'enseignements_id',
                'order'      =>   'Cycle.created DESC',
                'fields'     =>   'nomcycle,description',

                'dependance' =>   true
                )

        );
    public $validate = array(

        'specialite' => array(
            'rule1'=>array('rule'=>'isUnique','message'=>'Cette specialite existe déja','last'=>false),
            'rule2'=>array('rule'=>array('minLength',4),
                'message'=>'Votre Pseudo doit contenir plus de 8 caractères'),
            'required' => array('rule' => array('notEmpty'),'message'=>'Un pseudo est requis'))

        );
}

?>

et dans le model cycle ceci:
<?php 
class Cycle extends AppModel
{
    public $name = 'Cycle';
    public $belongsTo = array(
        'Enseignement' => array(

                'className'  => 'Enseignement',
                'foreignKey' => 'enseignements_id',
                'fields'      => 'specialite'

            )

        );
    public $validate = array(
        'nomcycle' => array(

                'rule' => 'isUnique',
                'allowEmpty' =>false,
                 'message'    => 'Ce champ est déja utilisé'                

             ),
        'desciption' => array(

            'rule' => array('allowEmpty' =>false),
            'message' => 'Ce champ ne doit pas être vide'

            )

        );
}

?>
dans la vue addcycle j'ai ceci:

<?php  echo $this->set('title_for_layout','Ajout d\' cycle'); ?>

<div class="panel panel-primary">
<div class="panel-heading">
    <h3 class="panel-title">Enregistrement d'un cycle</h3>
  </div>
  <div class="panel-body">

                                    <?php echo $this->Form->create('Cycle'); ?>

                      <div class="col-lg-12">
                                  <div class="col-lg-10">
                                  <div class="col-lg-8 line-input">

                                                <?php

                                                echo $this->Form->input('enseignements_id', array('options' => $listenseignement));

                                                $this->Form->unlockField('enseignements_id');
                                                 ?>
                                            </div>
                                            <div class="col-lg-12 line-input">

                                                <?php

                                                echo $this->Form->input('nomcycle', array('label'=>'Nom du cycle &nbsp;&nbsp;','type' => 'text','class'=>'form-control','placeholder'=>'Entrer le cycle','required'=>true));

                                                 ?>
                                            </div>
                                            <div class="col-lg-10 line-input">

                                                <?php

                                                echo $this->Form->input('description', array('label'=>'Description &nbsp;&nbsp;','type' => 'text','class'=>'form-control','placeholder'=>'Entrer la description','required'=>true));

                                                 ?>
                                            </div>

                                            <div class="col-lg-10 line-input">
                                            <p >
                                                    <?php
                                                            echo $this->Form->button(' Sauvegarder', array('type'=>'submit','class'=>'btn btn-primary btn-submit glyphicon glyphicon-ok'));
                                                            echo $this->Form->button(' Annuler', array('type'=>'reset','class'=>'btn btn-default btn-reset glyphicon glyphicon-refresh')); 

                                                            echo $this->Form->end();

                                                    ?>
                                            </p>
                                            </div>

                                  </div>

                                  <div class="col-lg-2">
                                    <p class="navbar-text text-justify">
                                            <h1>Information</h1>
                                            Cette section vous permet de créer les types de poste.
                                            Toute les opérations éffectuées dans votre gestion tiendrons compte de ce type.
                                            comme exemple on pourait avoir type1 = 1 sequence, type2=2 sequence, etc....

                                    </p>
                                  </div>

                      </div>

  </div>
  <div class="panel-footer"></div>
</div>
<div class="clearfix"></div>
et  dans le Appcontroller j'ai ceci

<?php
App::uses('Controller', 'Controller');
class AppController extends Controller {
    public $helpers = array('Html','Form','Session');
    public $components = array('Session','Security' =>array(
            'csrfUseOnce' => false 

        ));
    /*public function beforeFilter()
    {
        //debug($this->request);
    }*/

}

mon souci est que lors d'un save je rencontre un trou noir et ne sais pas le pourquoi et comment la gérer

que dis le LOG ?

romses
Auteur

Voici le message que je reçois

The request has been black-holed

Error: The requested address '/Gestionetablissement/Cycles/addcycle' was not found on this server.