2013-10-04 2 views
0

У меня есть BlocksController и Block model. В Я использовал действие редактирования для редактирования блоков моего приложения, и он работал нормально.Миграция CakePHP приводит к тому, что редактирование действует как добавление

После миграции на 1.3 и 2.x я заметил, что действие редактирования приводит к сохранению отредактированного блока в качестве новой записи.

В документах cakePHP я читал, что в 1.3 помощник формы больше не передает идентификатор, и поэтому модель рассматривала процесс как добавление.

Чтобы решить эту проблему, я попытался добавить скрытое поле с именем ID со значением идентификатора блока редактируется следующим образом:

<?php echo $this->Form->create('Block', array('class' => 'nice custom'));?> 
//The following line is required in cakephp 1.3+ 

<?php echo $this->Form->hidden('id', array('value' => $block['Block']['id']));?> 

Описанное решение работает нормально. Однако Мне нужно знать другой способ сделать это, не меняя вид. Это возможно?

+0

Что не так с простым входом 'echo $ this-> Form-> ('id')' как показано в документации и испеченном коде? – mark

+0

@mark Я только понял, что он не может быть напечатан как скрытый элемент формы. – SaidbakR

ответ

2

TLDR

Есть множество способов, чтобы сделать то, что вы хотите. Наиболее идеальным решением было бы добавить id в представление, аналогично тому, как вы упомянули. Но - есть много вариантов, о которых вы можете думать.


В View

Самый простой (и я бы поспорил идеал) решение было бы просто добавить идентификатор в вашем представлении. Вы должны быть в состоянии просто добавить его так:

echo $this->Form->input('id'); 

Это делает его автоматически скрывается, так как это «идентификатор», и он должен заполнить для вас, а если вы передаете данные правильно просмотра.


В контроллере

НО - так как ваш вопрос заключается в том, чтобы сделать это НЕ в представлении, другой вариант, чтобы сделать это в контроллере. Я не знаю вашего точного проекта, поэтому измените его по своему усмотрению, но перед сохранением вы всегда можете просто добавить данные к блоку id.

$this->request->data['Block']['id'] = $YOUR_ID; 
$this->Block->save($this->request->data); 

В модели

Это похоже на странное место, но - если вы будете хранить идентификатор в сессии или что-то, теоретически вы можете добавить идентификатор здесь до сохранения Что ж.

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