CakePHP передает идентификатор для редактирования формы - PullRequest
0 голосов
/ 10 мая 2011

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

function edit($id = null)
{
    $this->layout = 'page';

    // this line isn't needed?
    //$this->User->id = $id;

    if (empty($this->data))
    {
        $this->data = $this->User->read();
    }
    else
    {
        if ($this->User->save($this->data))
        {
            $this->Session->setFlash('Your profile has been updated', 'flash', array('header' => 'Announcement', 'myclass' => 'success'));
            $this->redirect(array('controller' => 'users', 'action' => 'view', $id));
        }
    }
}

Теперь функция ожидает передачи идентификатора в URL, например, /users/edit/2 Но, допустим, я хотел, чтобы это было что-то более удобное для пользователя, например /profile/edit (переписано путем маршрутизации). Я бы больше не передавал идентификатор как часть URL. Как вы можете видеть в моем коде, у меня есть строка, которую я закомментировал, потому что она не нужна?

Также в том виде, в котором я тоже нуждаюсь <?php echo $this->Form->input('id', array('type' => 'hidden')); ?> зачем?

По сути, это больше из того, что мне доступно для создания различных типов форм редактирования и передачи данных в форму. И для чего нужно скрытое поле в форме, если данные передаются либо через URL, либо другим способом

Я также заметил на некоторых сайтах, что у них есть такие вещи, как ключи формы и имя пользователя, хранящиеся в метатегах в заголовке страницы ???

EDIT:

public function beforeFilter()
{

        $this->set('authUser', $this->Auth->user());

        //

        $user = $this->Auth->user();

        if (!empty($user))
        {
            Configure::write('User', $user[$this->Auth->getModel()->alias]);
        }

}

public function beforeRender()
{
    $user = $this->Auth->user();

    if (!empty($user))
    {
        $user = $user[$this->Auth->getModel()->alias];
    }
    $this->set(compact('user'));
}


// NEW VERSION
function settings()
    {
        $this->layout = 'page';

        $this->set('title_for_layout', 'Edit Profile');

        $this->User->id = $user['id'];

        if (empty($this->data))
        {
            $this->data = $this->User->read();
        }
        else
        {
            if ($this->User->save($this->data))
            {
                $this->Session->setFlash('Your settings have been updated', 'flash', array('myclass' => 'success'));
                $this->redirect(array('controller' => 'users', 'action' => 'settings'));
            }
        }
    }

1 Ответ

2 голосов
/ 10 мая 2011

Также в форме мне также нужна форма-> input ('id', массив ('type' => 'hidden')); ?> почему?

Если скрыть id в форме, вам не нужно, чтобы действие вашего контроллера захватывало $id из uri (он также передается как параметр). Когда в форме, он будет автоматически помещен в ваш массив $data.

зачем нужно скрытое поле в форме, если данные в настоящее время передается либо через URL, либо через Другой способ

Это не нужно в форме, если это доступно из URI. Вы просто захватите $id и назначите его модели User (как это делает закомментированный код).

скажем, я хотел, чтобы это было что-то более удобный, как / профиль / редактировать

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...