首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >“闲谈”没有任何价值,我做错了什么?

“闲谈”没有任何价值,我做错了什么?
EN

Stack Overflow用户
提问于 2013-06-27 21:46:20
回答 1查看 44关注 0票数 0

我有一个schema.yml:

代码语言:javascript
运行
复制
SdrivingEmpresa:
  columns:
    idempresa:
      type: integer(4)
      unsigned: true
      primary: true
      autoincrement: true
    idlogotipo:
      type: integer(4)
      unsigned: true
      primary: true
    nombre_empresa:
      type: string(250)
      notnull: true
    ruta_emp:
      type: string(45)
      notnull: true
      autoincrement: false
  relations:
    SdrivingLogotipo:
      local: idlogotipo
      foreign: idlogotipo
      type: one
    SdrivingEmisor:
      local: idempresa
      foreign: idempresa
      type: many
    SdrivingMaquina:
      local: idempresa
      foreign: idempresa
      type: many
    SdrivingOperador:
      local: idempresa
      foreign: idempresa
      type: many
    SdrivingTurno:
      local: idempresa
      foreign: idempresa
      type: many
    SfGuardUserProfile:
      local: idempresa
      foreign: idempresa
      type: many

我用SdrivingLogotipoForm.class.php编写了这段代码

代码语言:javascript
运行
复制
class SdrivingLogotipoForm extends BaseSdrivingLogotipoForm {

    public function configure() {
        $this->widgetSchema['archivo'] = new sfWidgetFormInputFile(array('label' => ''));
        $this->validatorSchema['archivo'] = new sfValidatorFile(array(
            'required' => false,
            'path' => sfConfig::get('sf_upload_dir'),
            'mime_types' => 'web_images',
        ));
    }

}

SdrivingEmpresaForm.class.php

代码语言:javascript
运行
复制
class SdrivingEmpresaForm extends BaseSdrivingEmpresaForm {

    public function configure() {
        $logotipo = new SdrivingLogotipo();
        $logotipo->setIdlogotipo($logotipo);
        $this->embedForm('logotipo', new SdrivingLogotipoForm());
    }

}

当我执行create()方法时,Empresa会被保存,Logotipo文件也会被上传,但是SdrivingEmpresa中的字段idlogotipo获取0,为什么呢?我做错什么了?

使用来自SdrivingEmpresaForm的小部件的

在阅读了@1ed建议之后,我做了一些修改,现在SdrivingEmpresaForm.class.php有了以下代码:

代码语言:javascript
运行
复制
class SdrivingEmpresaForm extends BaseSdrivingEmpresaForm {

    public function configure() {
        $this->widgetSchema['idlogotipo'] = new sfWidgetFormInputFile(array('label' => ''));
        $this->validatorSchema['idlogotipo'] = new sfValidatorFile(array(
            'required' => false,
            'path' => sfConfig::get('sf_upload_dir'),
            'mime_types' => 'web_images',
        ));
    }

    public function doUpdateObject($values) {
        parent::doUpdateObject($values);

        if (isset($this['idlogotipo'])) {
            if ($this->isNew()) {
                $logotipo = new SdrivingLogotipo();
                $this->getObject()->setSdrivingLogotipo($logotipo);
            } else {
                $logotipo = $this->getObject()->getSdrivingLogotipo();
            }
        }
    }

}

但是,当我发送表单时,我会得到以下错误:

SQLSTATE23000:完整性约束违反: 1048列“idlogotipo”不能为空

并且logotipo文件没有上传,也没有创建。有什么帮助吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-27 22:42:43

应该将sfWidgetFormInputFile设置为SdrivingEmpresaForm,而不是在嵌入的for中设置

代码语言:javascript
运行
复制
$this->setWidget('logotipo', new sfWidgetFormInputFile());
...

更新:

如果您想要多个文件属于一个用户,那么您应该将id移到另一边,因此外键应该是logotipo表中的empersa id。处理这种关系是不方便的。有一种在文档中描述的方法,或者有一个插件,这可能会有所帮助,但它有其局限性。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17353764

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档