为什么我的变量未定义我点击提交按钮?

时间:2014-09-12 09:29:32

标签: cakephp

我有一个带有来自Controller TownsController的变量的表单中的字段,我使用“set”来表达能力。我得到了预期的结果,问题是当我想通过点击提交按钮发送我的信息时,我有几个错误告诉我变量是未定义的。

在我点击提交按钮之前:

enter image description here

点击提交按钮后:

enter image description here

观点:

        <h2>Informations de votre ville</h2>

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

              <div class="form-group">
              <div class="col-xs-6">
              <?php echo $this->Form->input('statut',array(
              'label' => 'Statut',
              'type' => 'select',
              'options' => array(
                'Village'=>'Village',
                'Ville'=>'Ville'),
              'selected' => $selectedstatut,
              'class' => 'form-control',
              'id' => 'town_statut_municipal',  
              'empty' => __('Statut municipal')
              ));
              ?>
                  </div>
              </div>

              <div class="form-group">
                  <div class="col-xs-6">
                     <?php echo $this->Form->input('name', array('type' => 'text', 'id' => 'town_name', 'class' => 'form-control', 'placeholder' => 'Choisir un statut municipal', 'label' => 'Nom')); ?>
                  </div>
              </div>

              <div class="form-group">
                  <div class="col-xs-6">
                    <?php echo $this->Form->input('country', array('type' => 'select', 'class' => 'form-control', 'label' => 'Pays', 'id' => 'town_country', 'onchange' => "print_state('state',this.selectedIndex);", 'selected' => $selectedcountry, 'empty' => false,
                      'options' => array(
                        'Canada'=>'Canada',
                        'USA'=>'USA'))); ?>
                  </div>
              </div>

              <div class="form-group">
                  <div class="col-xs-6">
              <?php 
              echo $this->Form->input('localisation', array('type' => 'select', 'class' => 'form-control', 'label' => 'Localisation', 'id' => 'state', 'empty' => $namelocalisation,
                    'options' => $localisations)); ?>
                  </div>
              </div>  

              <div class="form-group">
                   <div class="col-xs-12">
                        <br>
                        <?php
                            $options = array('label' => 'Sauvegarder', 'class' => 'btn', 'div' => false, 'class' => 'btn btn-lg btn-success');
                            echo $this->Form->end($options);
                          ?>
                    </div>
              </div>
        </form>

TownsController(编辑视图):

    public function edit(){
    $town_id = $this->Auth->user('town_id');
    $user_id = $this->Auth->user('user_id');
    if(!$town_id && !$user_id) {
        $this->redirect('/');
        die();
    }
    $this->Town->id = $town_id;
    if($this->request->is('put') || $this->request->is('post')) {
    }
    else {
         $this->request->data = $this->Town->read(array('name', 'country', 'localisation', 'statut'), null);
         $selectedstatut = $this->Session->read('Auth.Town.statut');
         $this->set(compact('selectedstatut'));
         $selectedcountry = $this->Session->read('Auth.Town.country');
         $this->set(compact('selectedcountry'));
         $countryuser = $this->Session->read('Auth.Town.country');

         if($countryuser = 'Canada') {
         $namelocalisation = 'Province';
         $localisations = array(
                'Alberta'=>"Alberta",
                'British Columbia'=>"British Columbia", 
                'Manitoba'=>"Manitoba", 
                'New Brunswick'=>"New Brunswick", 
                'Newfoundland'=>"Newfoundland", 
                'Northwest Territories'=>"Northwest Territories", 
                'Nova Scotia'=>"Nova Scotia", 
                'Nunavut'=>"Nunavut", 
                'Ontario'=>"Ontario", 
                'Prince Edward Island'=>"Prince Edward Island", 
                'Quebec'=>"Quebec", 
                'Saskatchewan'=>"Saskatchewan", 
                'Yukon Territory'=>"Yukon Territory");
         }
         if($countryuser = 'USA') {
         $namelocalisation = 'État';
         $localisations = array(
                'Alabama'=>"Alabama",
                'Alaska'=>"Alaska", 
                'Arizona'=>"Arizona", 
                'Arkansas'=>"Arkansas", 
                'California'=>"California", 
                'Colorado'=>"Colorado", 
                'Connecticut'=>"Connecticut", 
                'Delaware'=>"Delaware", 
                'District Of Columbia'=>"District Of Columbia", 
                'Florida'=>"Florida", 
                'Georgia'=>"Georgia", 
                'Hawaii'=>"Hawaii", 
                'Idaho'=>"Idaho", 
                'Illinois'=>"Illinois", 
                'Indiana'=>"Indiana", 
                'Iowa'=>"Iowa", 
                'Kansas'=>"Kansas", 
                'Kentucky'=>"Kentucky", 
                'Louisiana'=>"Louisiana", 
                'Maine'=>"Maine", 
                'Maryland'=>"Maryland", 
                'Massachusetts'=>"Massachusetts", 
                'Michigan'=>"Michigan", 
                'Minnesota'=>"Minnesota", 
                'Mississippi'=>"Mississippi", 
                'Missouri'=>"Missouri", 
                'Montana'=>"Montana",
                'Nebraska'=>"Nebraska",
                'Nevada'=>"Nevada",
                'New Hampshire'=>"New Hampshire",
                'New Jersey'=>"New Jersey",
                'New Mexico'=>"New Mexico",
                'New York'=>"New York",
                'North Carolina'=>"North Carolina",
                'North Dakota'=>"North Dakota",
                'Ohio'=>"Ohio", 
                'Oklahoma'=>"Oklahoma", 
                'Oregon'=>"Oregon", 
                'Pennsylvania'=>"Pennsylvania", 
                'Rhode Island'=>"Rhode Island", 
                'South Carolina'=>"South Carolina", 
                'South Dakota'=>"South Dakota",
                'Tennessee'=>"Tennessee", 
                'Texas'=>"Texas", 
                'Utah'=>"Utah", 
                'Vermont'=>"Vermont", 
                'Virginia'=>"Virginia", 
                'Washington'=>"Washington", 
                'West Virginia'=>"West Virginia", 
                'Wisconsin'=>"Wisconsin", 
                'Wyoming'=>"Wyoming");
         }
         $this->set('localisations', $localisations);
         $this->set('namelocalisation', $namelocalisation);
    }
  }

1 个答案:

答案 0 :(得分:0)

原因是如果请求不是POST,则设置这些变量。当您单击提交时,您的代码将进入“isPost”条件,因此永远不会设置变量localisations,namelocalisation,selectedcountry和selectedstatut。

这是我要做的(伪代码)

if ($this->request->is(array('post', 'put'))) {
    if ($this->Post->save($this->request->data)) {
        $this->Session->setFlash(__('Your post has been updated.'));
        return $this->redirect(array('action' => 'index'));
    }
}
$selectedstatut = $this->Session->read('Auth.Town.statut');
etc...

注意我在if语句之外设置视图变量,这样如果保存失败(因为验证),那么我们再次设置变量。