将值从动作类传递到symfony中的模型类

时间:2010-03-17 10:50:42

标签: symfony1

我有一个动作类,用于将一些数据保存到数据库。在动作类中,我通过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的任何其他方法 提前致谢

5 个答案:

答案 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)

我使用的最佳做法包括两个步骤:

  1. 将其他数据传递给表单选项(第二个构造函数的参数或仅$form->setOption('name', 'value'));
  2. 以这样的方式覆盖受保护的方法doUpdateObject

    protected function doUpdateObject($values)
    {
      $this->getObject()->setFoo($this->getOption('foo'));
      parent::doUpdateObject($values);
    }
    
  3. 享受!

答案 4 :(得分:0)

你可以使用(sfUser) - > setFlash和(sfUser) - > getFlash而不是setAttribute,它更安全......