Cakephp извлекает данные строки из таблицы - PullRequest
0 голосов
/ 08 июня 2019

Я пытаюсь вставить данные из строки в одной таблице в другую после нажатия кнопки. У меня есть таблица, содержащая информацию о классе. Когда пользователь нажимает кнопку «Зарегистрироваться», мне нужно взять идентификатор этого класса и вставить его в свою таблицу расписаний.

Пока что я пытаюсь получить идентификатор из данных POST. Однако когда я запускаю отладчик, идентификатор класса в массиве становится пустым.

Моя функция регистрации:

public function register(){

        $classestimetable = $this->Classestimetable->newEntity();
        if ($this->request->is('post')) {

            $classestimetable->user_id = $this->Auth->user('id');
            $classestimetable->unit_id = $this->request->getData(['id']);
            debug($classestimetable);exit;
            if ($this->Classestimetable->save($classestimetable)) {
                $this->Flash->success(__('The class has been added to your schedule.'));

                return $this->redirect(['action' => 'index']);
            }
            $this->Flash->error(__('The class could not be added. Please, try again.'));
        }

}

Код таблицы:

<tbody>
     <?php foreach ($units as $unit): ?>
         <tr>
                <td hidden><?= h($unit->id) ?></td>
                <td><?= h($unit->className) ?></td>
                <td><?= h($unit->user->firstName), ' ', h($unit->user->lastName) ?></td>
                <td><?= h($unit->classDate) ?></td>
                <td><?= h($unit->classTime) ?></td>
                <td class="actions"> 
                    <?= $this->Form->postLink(__('Register'), ['action' => 'register', $unit->id], ['confirm' => __('Are you sure you want to register for "{0}"?', $unit->className)]) ?>
                </td>
         </tr>
     <?php endforeach; ?>
</tbody>

Отладочный вывод:

object(App\Model\Entity\Classestimetable) {

    'user_id' => (int) 11,
    'unit_id' => null,
    '[new]' => true,
    '[accessible]' => [
        'unit_id' => true,
        'user_id' => true,
        'unit' => true,
        'user' => true
    ],
    '[dirty]' => [
        'user_id' => true,
        'unit_id' => true
    ],
    '[original]' => [],
    '[virtual]' => [],
    '[hasErrors]' => false,
    '[errors]' => [],
    '[invalid]' => [],
    '[repository]' => 'Classestimetable'

}

При работе я надеюсь, что поле unit_id будет содержать идентификатор класса, для которого пользователь выбрал регистрацию.

1 Ответ

0 голосов
/ 08 июня 2019

Вы используете $this->request->getData(['id']) для получения идентификатора. Но в создаваемом URL вы не назвали этот параметр. Либо изменить на:

['action' => 'register', 'id' => $unit->id]

или измените определение вашей функции на:

public function register($id)

и затем используйте $classestimetable->unit_id = $id;

...