在Symfony2中的“vendors”文件夹上运行本地修改的“bin / vendors install”

时间:2012-05-10 18:58:45

标签: symfony

在Symfony2中,当我运行命令bin/vendors install时,我收到以下消息:

?? src/Symfony/Component/Validator/Constraints/Alphanumeric.php
?? src/Symfony/Component/Validator/Constraints/AlphanumericValidator.php
?? src/Symfony/Component/Validator/Constraints/GreaterThan.php
?? src/Symfony/Component/Validator/Constraints/GreaterThanValidator.php
"symfony" has local modifications. Please revert or commit/push them before running this command again.

列出的文件是由我根据食谱条目here创建的自定义约束验证器。

有没有办法更新deps文件而忽略我所做的更改?我的目标是在保留由我创建的约束验证器文件的同时安装新的捆绑包。

更新:彼得解决方案是正确的,唯一剩下的就是在实体中“使用”正确的命名空间,如下所示:

(代码中有西班牙语单词,我将再次假设我在DemoBundle中只是为了保持一致性)

namespace Acme\DemoBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use Acme\DemoBundle\Component\Validator\Constraints as CustomAssert;

/**
 * @ORM\Entity
 */
class Employee
{
    //...

    /**
     * @ORM\Column(type="string", length=20)
     * @Assert\NotBlank()
     * @CustomAssert\Alphanumeric()
     */
    protected $alfanum;

    //...
}

3 个答案:

答案 0 :(得分:3)

您永远不应该更改供应商目录中包含的任何内容。如果您要添加新功能(并且您始终应该这样做),请将这些功能放在特定于应用程序的软件包中(在src目录中)。

您的命名空间/类方案应遵循框架约定。例如,你的约束验证器应该放在'src / MyNamespace / MyBundle / Validator / Constraint'中(你的命名空间应该是'MyNamespace \ MyBundle \ Validator \ Constraint')。

请注意,版本管理器应忽略供应商目录。

答案 1 :(得分:2)

不,不要这样做。您编写的自定义验证器(或自定义任何内容)应该是您的命名空间的一部分,而不是Symfony的一部分。他们当然不应该是供应商目录(除非你自己编写供应商)。这是命名空间和供应商管理的整点 - 以避免冲突!

因此,您需要将自定义验证程序移动到应用程序的源代码中。以AcmeDemoBundle为例......

为以下路径创建目录

src/Acme/DemoBundle/Component/Validator/Constraints

然后您的自定义验证程序移动到此文件夹中。然后相应地更新每个验证器类的命名空间

namespace Acme\DemoBundle\Component\Validator\Constraints

干杯

答案 2 :(得分:2)

您可以将自定义验证器放在自己的捆绑包中,并按照以下方式引用它,

# in validation.yml

# define namespace identifier
namespaces:
  namespace_name: Path\To\Your\Validator\Namespace\

# then in your entity
FQCN\Of\Entity:
  constraints:
    - Path\To\Your\Validator\Namespace\Alphanumeric
    # or
    - "namespace_name:Alphanumeric": ~