Правильный способ ввести данные сеанса перед сохранением / проверкой модели в CakePHP 1.3? - PullRequest
0 голосов
/ 07 января 2011

Использование CakePHP 1.3.6

Я использую аутентификацию без входа в систему через уникальное значение в качестве параметра URL-адреса, поэтому, когда «приглашенный» пользователь получает доступ к предоставленной ссылке, я знаю, кто он, и задаю некоторую информацию о пользователе в сеансе.

На этой странице есть форма с родителем и родственными дочерними моделями (hasMany, ownTo, все такое).

Каждая дочерняя модель имеет поле 'agent_id' (модель FK to Agent, которая загружается при доступе к странице), которое необходимо заполнить идентификатором, ранее загруженным в сеанс.

Нужно ли создавать скрытое поле ввода для «agent_id» рядом с каждой дочерней моделью группы элементов формы, или есть более простой способ?

Возможно, я смогу взять сессию или что-то из Модели / Поведения beforeValidate() или что-то подобное? Это было бы идеально, но я не уверен, как.

Спасибо!

1 Ответ

2 голосов
/ 07 января 2011

Не рекомендуется ( в шаблоне MVC ) вызывать значения сеанса из модели.Это значение должно быть предоставлено действием.

Создание скрытого ввода не является хорошей идеей, поскольку пользователь может изменить его.

Таким образом, ваш код должен быть примерно таким.

if (!empty($this->data)) {
    $this->Model->create();
    $this->data['Model']['agent_id'] = $this->Auth->user('id');
    if ($this->Model->save($this->data)) { 
         // success
    }
}

РЕДАКТИРОВАТЬ

Да, вы можете читать сеансы из модели, но рекомендуется , а не .Потому что это на самом деле нарушает архитектуру MVC.Если вам все равно, вы можете использовать

// in your Model.php
App::import('Model', 'CakeSession');
$session = new CakeSession();

Ссылки

  1. Использование сессионных переменных в библиотеке модели домена MVC
  2. http://groups.google.com/group/cake-php/browse_thread/thread/163bd9b60aa8757b/80163f0de8c54ad1?lnk=raot&pli=1
  3. http://cakephp.1045679.n5.nabble.com/Checking-user-session-in-model-td1294422.html
  4. подробнее
...