在Symfony2中的“供应商”文件夹上运行“bin/vendors install”,并进行本地修改

在Symfony2中的“供应商”文件夹上运行“bin/vendors install”,并进行本地修改,symfony,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 ??

在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.
列出的文件是由我按照cookbook条目创建的自定义约束验证器

有没有一种方法可以忽略我所做的更改来更新deps文件?我的目标是安装一个新包,同时保留由我创建的约束验证器文件

更新:Peter的解决方案是正确的,唯一剩下的就是在实体内部使用正确的名称空间,如下所示:

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

名称空间Acme\DemoBundle\Entity; 使用条令\ORM\Mapping作为ORM; 使用Symfony\Component\Validator\Constraints作为断言; 使用Acme\DemoBundle\Component\Validator\Constraints作为CustomAssert; /** *@ORM\Entity */ 班级员工 { //... /** *@ORM\Columntype=string,长度=20 *@Assert\NotBlank *@CustomAssert\字母数字 */ 保护$alfanum; //... }
您不应更改供应商目录中包含的任何内容。如果您有新功能要添加,并且您应该始终添加,请将这些功能放在src目录中特定于应用程序的捆绑包中

您的名称空间/类方案应该遵循框架约定。例如,您的约束验证器应该位于“src/MyNamespace/MyBundle/validator/constraint”中,而您的命名空间应该是“MyNamespace\MyBundle\validator\constraint”


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

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

您的名称空间/类方案应该遵循框架约定。例如,您的约束验证器应该位于“src/MyNamespace/MyBundle/validator/constraint”中,而您的命名空间应该是“MyNamespace\MyBundle\validator\constraint”


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

不,不要这样做。自定义验证器或您编写的任何自定义内容都应该是命名空间的一部分,而不是Symfony。当然,除非您编写自己的供应商,否则它们根本不应该是供应商目录。这就是名称空间和供应商管理的全部要点——以避免冲突

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

为以下路径创建目录

src/Acme/DemoBundle/Component/Validator/Constraints
然后将自定义验证程序移动到此文件夹中。然后相应地更新每个验证器类的名称空间

namespace Acme\DemoBundle\Component\Validator\Constraints

干杯

不,不要这样做。自定义验证器或您编写的任何自定义内容都应该是命名空间的一部分,而不是Symfony。当然,除非您编写自己的供应商,否则它们根本不应该是供应商目录。这就是名称空间和供应商管理的全部要点——以避免冲突

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

为以下路径创建目录

src/Acme/DemoBundle/Component/Validator/Constraints
然后将自定义验证程序移动到此文件夹中。然后相应地更新每个验证器类的名称空间

namespace Acme\DemoBundle\Component\Validator\Constraints

干杯

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

# 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": ~ 

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

# 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": ~ 

验证码?我也必须创建那个文件吗?你能告诉我如何使用注解吗?validation.yml?我也必须创建那个文件吗?你能告诉我如何使用注释吗?谢谢,你的回答让我找到了完整的解决方案。我只需要更新我的问题,为像我这样的新加入Symfony的人扩展一点您的答案。谢谢,您的回答引导我找到了完整的解决方案。我只需要更新我的问题,为像我这样的新认识Symfony的人扩展一点你的答案。