Использование sfDoctrineGuardPlugin.Хотите установить поле идентификатора без выбора пользователя - PullRequest
1 голос
/ 24 января 2011

Я использую Symfony 1.4 и Doctrine 1.2 и sfDoctrineGuardPlugin.У меня есть страница создания статьи.В моей таблице статей у меня есть поле profile_id для сохранения, какой пользователь (автор) написал это.

Моя проблема в том, что когда пользователь пишет статью и щелкает, чтобы сохранить, даже если я могу получить profile_id от пользователя, я не могу автоматически установить profile_id.

В моем классе articleForm я могу установитьзначение по умолчанию для поля выбора, но пользователь может изменить его.Если я пытаюсь сделать это только для чтения, profile_id не может быть сохранен на БД.

Вот моя функция настройки из класса articleForm:

// getting user_id $user = sfContext::getInstance()->getUser(); $user_id = $user->getGuardUser()->getId();</p> <pre><code>// converting for profile table $converter = Doctrine_Query::create() ->select('*') ->from('profile') ->where('sf_guard_user_id = ?', $user_id); // fetching $result = $converter->fetchArray(); $this->widgetSchema->setDefault('profile_id', $result[0]['id']);

Чтобы сделать ее только для чтения, я использовал:

$this->offsetUnset("profile_id");

Но, как я уже говорил, таким образом, profile_id не может быть сохранен в БД.Без второй части кода текущий идентификатор стал стандартным, но пользователи могут изменить его.

Как решить эту проблему?Любая идея?Большое спасибо ...

1 Ответ

0 голосов
/ 24 января 2011

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

...