2014-02-06 6 views
1

Студенты HasMany Платежи и платежи принадлежат Студенту. При создании Платежа я должен указать, для какого ученика я создаю этот платеж. Я хочу иметь доступ к идентификатору студента при создании Платежа, чтобы манипулировать чем-либо в методе add().Доступ к переменной в методе контроллера CAKEPHP

У меня есть метод add() в моем контроллере. Вот текущий код для add().

public function add() {  
    if ($this->request->is('post')) { 
     $this->Payment->create(); 
     if ($this->Payment->save($this->request->data)) { 
      $this->Session->setFlash(__('The payment has been saved.')); 
      return $this->redirect(array('action' => 'index')); 
     } else { 
      $this->Session->setFlash(__('The payment could not be saved. Please, try again.')); 
     } 
    } 
    $students = $this->Payment->Student->find('list'); 
    $this->set(compact('students')); 
} 

Форма оплаты Код

<?php echo $this->Form->create('Payment'); ?> 
<fieldset> 
    <legend><?php echo __('Add Payment'); ?></legend> 
<?php 
    echo $this->Form->input('student_id'); 
    echo $this->Form->input('date'); 
    echo $this->Form->input('total', array('default' => '0.0')); 
    echo $this->Form->input('notes'); 
?> 
</fieldset> 
<?php echo $this->Form->end(__('Submit')); ?> 
+0

Вы можете добавить код для формы оплаты в представлении? Если вы выбираете учащегося в этой форме, его следует включить в '$ this-> request-> data' –

ответ

2

Вы должны быть в состоянии получить доступ к ID, как

$this->request->data['Payment']['student_id'] 

Так что-то вроде этого:

public function add() {  
    if ($this->request->is('post')) { 
     $this->Payment->create(); 
     $student_id = $this->request->data['Payment']['student_id']; 
     // Do something with student ID here... 
     if ($this->Payment->save($this->request->data)) { 
      $this->Session->setFlash(__('The payment has been saved.')); 
      return $this->redirect(array('action' => 'index')); 
     } else { 
      $this->Session->setFlash(__('The payment could not be saved. Please, try again.')); 
     } 
    } 
    $students = $this->Payment->Student->find('list'); 
    $this->set(compact('students')); 
} 
+0

Спасибо! очень полезно –

1

Одна стратегия, которую я считаю очень полезным для навигации больших многомерных массивов CakePHP является использование функции debug() часто в процессе развития.

Например, в методе Add() Я хотел бы сделать что-то вроде:

if ($this->request->is('post')) { 
    debug($this->request->data); 
    die; 
} 

Тогда вы сможете увидеть, где что студент идентификатор скрывается и использовать его, как вам нужно, прежде оных () метод заканчивается. Я не знаю точную структуру вашего массива будет внутри, но, скорее всего, вы должны быть в состоянии сделать что-то вроде:

$student_id = $this->request->data['Payment']['Student']['id']; 

Просто проверьте вывод отладки() первый (после отправки формы) в определить, где в массиве были помещены данные, которые вы хотите.

+0

Спасибо! Я обязательно буду использовать это в будущем. теперь он работает –

Смежные вопросы