更改symfony项目上composer管理的第三方软件包上的源文件
我正在使用symfony框架开发一个Web应用程序。 我的数据库设计是预先存在的,不是“经典的”——也就是说,使用的是“hstore”和“json”字段类型 到目前为止,我遇到了两个问题:更改symfony项目上composer管理的第三方软件包上的源文件,symfony,doctrine-orm,composer-php,packages,require,Symfony,Doctrine Orm,Composer Php,Packages,Require,我正在使用symfony框架开发一个Web应用程序。 我的数据库设计是预先存在的,不是“经典的”——也就是说,使用的是“hstore”和“json”字段类型 到目前为止,我遇到了两个问题: Doctrine不支持PgSQL上的hstore或json字段格式-I'v设法更改了DBAL驱动程序和ORM的供应商/Doctrine的来源以实现这一点 Doctrine还有一个BUG(使用symfony的最新版本),该BUG可能在早期版本中已解决,该BUG与将pg时间戳转换回PHP时间戳有关,时间格式不包括
- 如果文件由编写器管理,如何保持更新
- 如果我更改了源代码,如何将其部署到另一个环境中
- 是否有替代解决方案/HAKC在不更改第三方软件包的情况下解决上述问题
- 是否有一种方法可以在composer中部署自定义提交(不介意分叉DoctorineBundle)
- 在供应商安装之后,是否有一种好的方法来“修补”源代码?(可能以某种方式使用安装后脚本)
注意我不熟悉使用composer进行的所有此类依赖关系和包导入/管理。首先,原则是非常可扩展的。当然,应该有一种方法可以使用捆绑包代码扩展它,而无需修改
vendor/
中的任何内容
条令的文档声明已支持json
类型:<根据doc,code>hstore不是,但是如果你能实现它,这是值得合并到doctor项目中的东西
日期时间问题也是众所周知的:
在forking Composer提供的库上:您可以在Github上fork原则,并将存储库
块添加到Composer.json
,指向您的fork:
{
...
"repositories": [
{
"type": "vcs",
"url": "http://github.com/**your/fork**"
}
]
}
使用Composer更新条令包(应该是php Composer.phar Update Doctrine/orm
,或者Doctrine/dbal
,Doctrine/common
或者Doctrine/Doctrine bundle
,如果您正在分叉该捆绑包),并且它应该拉动您的分叉代码,而不是原始的条令代码。查看正在分叉的库的composer.json
中的“name”
值
这里有一个更详细的关于分叉的教程:经过一些研究,似乎关于symfony(DoctrineBundle)的学说可以扩展到了解自定义类型 json DBAL类型实际上称为json_数组,而不是json(doono why),hstore和inet需要作为新类型实现(inet可能不需要,可以将其别名为string) 为了使一切正常工作,我们需要完成以下两个步骤(如果只执行其中一个步骤,则映射导入失败,或者cache:clear失败)
# config.yaml
doctrine:
types:
hstore: vendor\MyBundle\Types\Hstore
inet: vendor\MyBundle\Types\Inet
bootstrap code
是bundle的boot()方法;我们现在需要告诉ORM将数据库链接到这些类,如下所示:
class MyBundle extends Bundle
{
public function boot()
{
$em = $this->container->get('doctrine')->getEntityManager();
$platform = $em->getConnection()->getDatabasePlatform();
//for some reason, Doctrine DBAL calls a json type json_array, we rename it / alias it here.
$platform->registerDoctrineTypeMapping('Json', 'json_array');
$platform->registerDoctrineTypeMapping('Hstore', 'hstore');
$platform->registerDoctrineTypeMapping('Inet', 'inet');
}
}
我还没有测试所有这些的实现,但至少现在在应用程序/控制台上没有任何异常。一旦我确定我的实现是正确的,我将使用类型源代码进行更新。当然,另一个选择是尝试不同的ORM,我也会尝试。找到相关问题,也有一些有用的答案,我使用了
php应用程序/控制台原则:generate:entities
对数据库进行反向工程,它在json和hstore方面给我带来了一个错误(更不用说我需要从文件名和映射文件中删除模式前缀了)。请检查您正在使用的原则版本,并尽可能尝试更新到开发/功能分支。或者医生有问题。