CakePHP: поля не заполняются на экране редактирования - PullRequest
0 голосов
/ 08 октября 2010

Простой вопрос с абсолютного n00b.

Я пытаюсь создать экран редактирования контента на основе кода, приведенного в руководстве по блогам на сайте Cake.

Вот моя функция редактирования в контроллере (она называется Contents):

function edit( $id = null ) {
    $this->Content->id = $id;
    Debugger::dump( $this->Content->id );
    if( empty( $this->data ) ) {
        $this->data = $this->Content->read();
        Debugger::dump( $this->Content );
    }
    else {
        if( $this->Content->save( $this->data ) ) {
        $this->Session->setFlash( 'Content has been updated.' );
        $this->redirect( array('action' => 'index') );
        }
    }
}

И это edit.ctp :

echo $form->create( 'Content', array('action' => 'edit') );
echo $form->input( 'id', array('type' => 'hidden') );
echo $form->input( 'title' );
echo $form->input( 'nicename' );
echo $form->end( 'Save' );

Тем не менее, когда я захожу на экран «Правка», поля ввода НЕ ЗАПУСКАЮТСЯ с запрошенными данными.

Я использую HTML Helper для создания ссылок, и моя ссылка для редактирования принимает вид:

http://localhost/contents/edit/id:4c8efaa0-02fc-46bf-ac65-06a07614f57d

Как видите, я ввел два дампа отладчика в функции редактирования контроллера ... они показывают, что $ this-> Content-> id остается NULL, когда я посещаю этот URL,

НО, если я изменю URL-адрес этой формы (обратите внимание, что я использовал '=' вместо ':' ):

http://localhost/contents/edit/id=4c8efaa0-02fc-46bf-ac65-06a07614f57d

Отладчик сообщает $ this-> Content-> id , чтобы иметь правильное значение ...

Однако мои поля все еще не заполняются.

Функция индекса работает нормально, хотя ...

function index() {
    $this->set( 'contents', $this->Content->find( 'all' ) );
}

Вышеприведенная функция правильно выводит содержимое!

Где я ошибаюсь?Я упускаю какой-то важный фрагмент кода в представлении?Любая помощь будет высоко ценится.

Спасибо, м ^ е

1 Ответ

2 голосов
/ 08 октября 2010

Проблема здесь:

http://localhost/contents/edit/id:4c8efaa0-02fc-46bf-ac65-06a07614f57d

В основном ваш URL должен выглядеть следующим образом:

http://localhost/contents/edit/4c8efaa0-02fc-46bf-ac65-06a07614f57d

Как вы можете заметить, идентификатор: отсутствует в правильном URL.Причина: если вы передаете идентификатор: это именованный параметр, и он не назначен $ id в функции.

Ваша ссылка для формы редактирования должна выглядеть следующим образом:

$this->Html->link('Edit', array('controller'=>contents', 'action'=>'edit', $id_variable));
...