【问题标题】:Passing values from action class to model class in symfony在 symfony 中将值从动作类传递到模型类
【发布时间】:2010-03-17 10:50:41
【问题描述】:

我有一个用于将一些数据保存到数据库的操作类。在操作类中,我通过 url 获取 id。我必须将 id 保存在表中。

我通过 $request->getParameter('id') 获取 id

我用这个代码保存

$this->form->bind($request->getParameter('question_answers')); if ($this->form->isValid()) {
$this->form->save(); $this->redirect('@homepage'); }

在模型类中我使用了覆盖保存方法来保存额外的字段

公共函数保存(Doctrine_Connection $conn = null) { if ($this->isNew()) {

$now=date('Y-m-d H:i:s', time());
$this->setPostedAt($now);

} 返回父级::save($conn); 所以我想在这里获取 id 值。 那么如何将 id 值从动作类传递给模型类

是在动作类本身中保存 id 的任何其他方式 提前致谢

【问题讨论】:

  • 那个 id 是关于什么的?它是数据库表中对象的 id 吗?
  • 不,是从 url 获取的数字

标签: symfony1


【解决方案1】:

随便用

$this->form->getObject()->setQuestionId($request->getParameter('id')); $this->form->save();

QuestionId=字段名称

$request->getParameter('id')= 是默认值

【讨论】:

    【解决方案2】:

    很可能不是最好的解决方案,但您可以将该 id 值保存在会话变量中,然后在需要的任何地方使用它。类似:

    $this->getUser()->setAttribute('id', $request->getParameter('id')); // in action class
    

    sfContext::getInstance()->getUser()->getAttribute('id'); // in model class
    

    【讨论】:

    • 是否可以像 $this->form->question_id=2; 那样保存在动作类本身中;
    • 我实际上打算为您提供相同的服务,但我面前没有我的工作环境,所以我无法在回答之前进行测试,但您也可以尝试一下。对我来说听起来可能。
    • 只需使用 $this->form->getObject()->setQuestionId($request->getParameter('id')); $this->form->save(); QuestionId=字段名称 $request->getParameter('id')= 为默认值
    【解决方案3】:

    如果您的模型已经有此 ID 的字段(例如,在您的示例中,posted_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);
    

    如果您手动呈现表单,请不要在视图模板中呈现这个新字段。

    无论哪种方式,保存模型作为表单保存的结果将包含我相信的这个新字段。第二个来自记忆,但从技术上讲它应该可以工作...... :-)

    【讨论】:

    • 实际上 id 是从我想添加到表格中的 url 获取的
    【解决方案4】:

    我使用的最佳实践包括两个步骤:

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

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

    享受吧!

    【讨论】:

      【解决方案5】:

      您可以使用 (sfUser)->setFlash 和 (sfUser)->getFlash 代替 setAttribute,这样更安全...

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-07
        • 2015-08-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多