我有一个动作类,用于将一些数据保存到数据库。在动作类中,我通过url获取id。我必须将id保存在表中。
我通过$ request-> getParameter('id')
获取ID我用这段代码保存
$这 - >形状配合>绑定($请求 - >的getParameter( 'question_answers'));
if($ this-> form-> isValid())
{
$这 - >形状配合>保存();
$这 - >重定向( '@主页');
}
在模型类中,我使用了覆盖保存方法来保存额外的字段
公共函数保存(Doctrine_Connection $ conn = null) { if($ this-> isNew()) {
$now=date('Y-m-d H:i:s', time());
$this->setPostedAt($now);
} return parent :: save($ conn); 所以我想在这里得到id值。 那么如何将id值从action类传递给模型类
是在动作类本身中保存id的任何其他方法 提前致谢
答案 0 :(得分:1)
只需使用
$这 - >形状配合>的getObject() - > setQuestionId($请求 - >的getParameter( '编号')); $这 - >形状配合>保存();
QuestionId =字段名称
$ request-> getParameter('id')=是默认值
答案 1 :(得分:0)
最有可能不是最佳解决方案,但您可以将该id值保存在会话变量中,并在以后需要的任何地方使用它。类似的东西:
$this->getUser()->setAttribute('id', $request->getParameter('id')); // in action class
和
sfContext::getInstance()->getUser()->getAttribute('id'); // in model class
答案 2 :(得分:0)
如果您的模型已经有了此ID的字段(例如在您的示例中为publish_id),那么您可以执行以下两项操作之一:
1:在创建表单时将ID传递给表单,作为选项:
$this->form = new MyForm(array(), array("posted_id" => $id));
然后你可以覆盖你的表单的doSave()方法来设置字段:
// ...
$this->getObject()->posted_id = $this->getOption("posted_id");
// ...
或类似的
2:使用相应的验证器在configure()方法中向窗体添加窗口小部件,并在从请求中获取值时传入ID:
$values = $request->getParameter('question_answers');
$values["posted_id"] = $request->getParameter("id");
$this->form->bind($values);
如果您手动渲染表单,请不要在视图模板中渲染此新字段。
无论哪种方式,保存模型作为保存表单的结果将包括我相信的这个新字段。第二个来自记忆,但它在技术上应该有效......: - )
答案 3 :(得分:0)
我使用的最佳做法包括两个步骤:
$form->setOption('name', 'value')
); 以这样的方式覆盖受保护的方法doUpdateObject
:
protected function doUpdateObject($values)
{
$this->getObject()->setFoo($this->getOption('foo'));
parent::doUpdateObject($values);
}
享受!
答案 4 :(得分:0)
你可以使用(sfUser) - > setFlash和(sfUser) - > getFlash而不是setAttribute,它更安全......