Is it worth looking at the $allowedActions option? 
http://book.cakephp.org/view/1297/Configuration

Jeremy Burns
Class Outfit

http://www.classoutfit.com

On 2 Aug 2011, at 10:56, varai wrote:

> Finally I managed to solve the prob after 2 weeks of research and
> reading up. The problem was Cakephp's security component was
> blackholing Ajax's observeField request. So, the security component
> has to be disabled for the observeField to work. Added the following
> beforeFilter code (found from the net) in StudentsController:
> 
> function beforeFilter()//executed before any controller action logic
>       {
>           if(isset($this->Security) && $this->RequestHandler->isAjax() &&
> $this->action = 'getcities'){
>               $this->Security->enabled = false;
>                       }
> 
>       }
> 
> On Jul 30, 3:39 pm, varai <[email protected]> wrote:
>> I'm trying to populate the city select box based on the selected state
>> (which is also a select box) using Ajax. When i select state, the city
>> select box is not being populated.
>> 
>> There are 5 models below: Student, MerryParent, MerryClass, State,
>> City. All of them are related to one another.
>> 
>> Can someone please tell me on what am I doing wrong? thank you.
>> 
>> The following are the models:
>> student.php
>> 
>>      <?php
>>      class Student extends appModel{
>>         var $name='Student';
>>         var $belongsTo=array('MerryParent','State','City','MerryClass');
>> 
>>                   }
>>           ?>
>> 
>> merry_parent.php
>> 
>>          <?php
>>          class MerryParent extends appModel{
>>         var $name='MerryParent';
>>         $hasMany=array(
>>                     'Student'=>array(
>>                         'className'=>'Student',
>>                         'foreignKey'=>'merry_parent_id'
>>                                 )
>>                                 );
>>         $belongsTo=array('State','City','MerryClass');
>> 
>>                              ?>
>> 
>> merry_class.php
>> 
>>              <?php
>>                 class MerryClass extends AppModel{
>>                  var $name='MerryClass';
>>                  var $hasMany=array
>>                 ('Student'=>array(
>>                                 'className'=>'Student',
>>                                 'foreignKey'=>'class_id'
>>                                 ),
>>                  'MerryParent'
>>                 );
>>                 var $belongsTo=array('State','City');
>>                 //var $displayField='class_name';
>>                }
>>               ?>
>> 
>> city.php
>> 
>>           <?php
>>             class City extends AppModel{
>>                 var $name='City';
>>                 var $belongsTo='State';
>>                 var $hasMany=array('MerryParent','MerryClass',
>>                                 'Student'=>array(
>>                                         'className'=>'Student',
>>                                         'foreignKey'=>'city_id'
>>                                         )
>>                             );
>>                      }
>>             ?>
>> 
>> state.php
>> 
>>                    <?php
>>                           class State extends AppModel{
>>                                  var $name='State';
>>                                  var $hasMany=array(
>>                                 'MerryParent',
>>                                 'MerryClass',
>>                                 'City'=>array(
>>                                 'className'=>'City',
>>                                 'foreignKey'=>'state_id'
>>                                 //'dependent'=>true
>>                                 ),
>>                                 'Student'=>array(
>>                                 'className'=>'Student',
>>                                 'foreignKey'=>'state_id'
>>                                 )
>>                         );
>> 
>>                   }
>>                  ?>
>> 
>> The controllers
>> students_controller.php
>> 
>>     <?php
>>     class StudentsController extends AppController{
>>      var $name='Students';
>>      var $helpers = array('Html','Form','Ajax','Javascript');
>>      var $components=array('RequestHandler');
>> 
>>         function getcities(){
>> 
>>                 $options=$this->Student->City->find('list',
>>                                                                              
>>    array
>>                                                                              
>>    ('conditions'=>array(
>>                                                                              
>>                                    
>> 'City.state_id'=>$this->data['Student']['state_id']
>>                                                                              
>>                                    ),
>>                                                                              
>>     'group'=>array('City.name')
>>                                                                         )
>>                                                                         
>> );//closing parentheses for find('list'...
>> 
>>                 $this->render('/students/ajax_dropdown');
>>         }
>> 
>>         function add(){
>> 
>>                 if (!empty($this->data)){
>>                         /*var_dump($this->data);
>>                         die(debug($this->Student->validationErrors)); */
>>                         
>> $student=$this->Student->saveAll($this->data,array('validate'=>'first'));
>> 
>>                         if (!empty($student))
>>                            {
>>                                 $this->Session->setFlash('Your child\'s 
>> admission has been
>> received. We will send you an email shortly.');
>>                                                 
>> $this->redirect(array('controller'=>'pages', 'action'=>'home'));
>> 
>>                                 }
>> 
>>             } //for if (!empty....
>> 
>>          $states=$this->Student->State->find('list');
>> 
>>                 $cities=array();
>>           $this->set(compact('states','cities'));
>> 
>>         }//end function}
>> 
>> ?>
>> 
>> merry_parents_controller.php
>> 
>>     <?php
>>      class MerryParentsController extends AppController{
>> 
>>         var $name='MerryParents';
>> 
>>      }
>>      ?>
>> 
>> add.ctp
>> 
>>       <?php
>>          echo $javascript->link('prototype',false);
>> 
>>         echo $form->create('Student');
>>         echo '<fieldset>';
>>         echo '<legend>Student Information</legend>';
>>         echo $form->input('Student.name');
>> 
>>         $options = array('Male'=>'Male','Female'=>'Female');
>>         $attributes = array('value'=>'Male');
>>         echo $form->radio('Student.gender',$options,$attributes);
>> 
>>         echo $form->input('Student.dob', array('label'=>'Date of Birth',
>>                                         'dateFormat'=>'DMY',
>>                                         'empty'=>true,
>>                                         'timeFormat' => '',
>>                 'minYear' => (
>>                         date('Y') - 5
>>                 ),
>>                 'maxYear' => (
>>                         date('Y') - 2
>>                 )
>>                                 ));
>>         echo $form->input('Student.class_id',
>>                         array(
>>                         'label'=>'Enquiry Class for',
>>                         'empty'=>'Choose one',
>>         'options'=>array('1'=>'Playgroup','2'=>'Nursery','3'=>'LKG',
>> '4'=>'UKG')
>>                         )
>>                         );
>> 
>>         echo '</fieldset>';
>> 
>>         echo '<fieldset>';
>>         echo '<legend>Parent Information</legend>';
>>         //echo $form->input('Student.parent_id', array('type'=>'hidden'));
>>         echo $form->input('MerryParent.initial',
>>         array('empty'=>true,
>>         'options'=>array('Dr'=>'Dr',
>>                                         'Mr'=>'Mr',
>>                                         'Mrs'=>'Mrs',
>>                                         'Ms'=>'Ms')
>>         )
>>         );
>>         echo $form->input('MerryParent.name', array('label'=>'Parent/Guardian
>> Name'));
>>         echo $form->input('MerryParent.email');
>>         echo $form->input('MerryParent.landline');
>>         echo $form->input('MerryParent.mobile');
>>         echo $form->input('MerryParent.address');
>>           echo $form->input('Student.state_id');
>>          echo $form->input('Student.city_id');
>>           echo $form->input('MerryParent.postal_code');
>> 
>>           $options = array('url' => 'getcities', 'update' =>
>> 'StudentCityId');
>>       echo $ajax->observeField('StudentStateId', $options); //observes
>> the drop down
>>         changes in state id and makes an xmlHttpRequest when its
>> contents have changed.
>> 
>>                 echo '</fieldset>';
>> 
>>         echo $form->end('Submit');
>>         ?>
>> 
>> ajax_dropdown.ctp
>> 
>>          <?php foreach($options AS $k=>$v) : ?>
>>           <option value="<?php echo $k; ?>"><?php echo $v; ?></option>
>>          <?php endforeach; ?>
>> 
>> 
> 
> -- 
> Our newest site for the community: CakePHP Video Tutorials 
> http://tv.cakephp.org 
> Check out the new CakePHP Questions site http://ask.cakephp.org and help 
> others with their CakePHP related questions.
> 
> 
> To unsubscribe from this group, send email to
> [email protected] For more options, visit this group at 
> http://groups.google.com/group/cake-php

-- 
Our newest site for the community: CakePHP Video Tutorials 
http://tv.cakephp.org 
Check out the new CakePHP Questions site http://ask.cakephp.org and help others 
with their CakePHP related questions.


To unsubscribe from this group, send email to
[email protected] For more options, visit this group at 
http://groups.google.com/group/cake-php

Reply via email to