Php Zend Framework 2条令2 CLI从YAML每个模块生成实体
我有一个干净的ZendSkeletonApplication项目,通过Composer集成了条令2模块“条令orm模块”等。原则CLI从供应商/银行标识代码开始工作 我有“应用程序”和“博客”模块,我的模块配置:Php Zend Framework 2条令2 CLI从YAML每个模块生成实体,php,orm,doctrine-orm,yaml,zend-framework2,Php,Orm,Doctrine Orm,Yaml,Zend Framework2,我有一个干净的ZendSkeletonApplication项目,通过Composer集成了条令2模块“条令orm模块”等。原则CLI从供应商/银行标识代码开始工作 我有“应用程序”和“博客”模块,我的模块配置: <?php namespace Blog; return array( 'router' => array( 'routes' => array( 'post' => array( 'type' => 'segme
<?php
namespace Blog;
return array(
'router' => array(
'routes' => array(
'post' => array(
'type' => 'segment',
'options' => array(
'route' => '/post[/:action][/:id]',
'constraints' => array(
'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
'id' => '[0-9]+',
),
'defaults' => array(
'controller' => 'Blog\Controller\Post',
'action' => 'index',
),
),
),
),
),
'controllers' => array(
'invokables' => array(
'Blog\Controller\Post' => 'Blog\Controller\PostController'
),
),
'view_manager' => array(
'template_path_stack' => array(
'blog' => __DIR__ . '/../view',
),
),
'doctrine' => array(
'driver' => array(
__NAMESPACE__ . '_driver' => array(
'class' => 'Doctrine\ORM\Mapping\Driver\AnnotationDriver',
'cache' => 'array',
'paths' => array(__DIR__ . '/../src/' . __NAMESPACE__ . '/Entity')
),
'orm_default' => array(
'drivers' => array(
__NAMESPACE__ . '\Entity' => __NAMESPACE__ . '_driver'
)
)
)
)
);
DoctrineModule
不正式支持实体生成。使用ORM的本机CLI(/vendor/bin/doctor
)生成实体,然后将它们移动到模块中所需的位置。以下方法快速而肮脏的方法对我有效:
将以下行添加到…vendor\doctor\doctor module\bin\doctor-module.php:
$driverImpl = new \Doctrine\ORM\Mapping\Driver\YamlDriver(
array("YOUR_PATH_TO_YAML_FILES"));
/* @var $em \Doctrine\ORM\EntityManager */
$em = $application->getServiceManager()->get('doctrine.entitymanager.orm_default');
$em->getConfiguration()->setMetadataDriverImpl($driverImpl);
//...old code...
/* @var $cli \Symfony\Component\Console\Application */
$cli = $application->getServiceManager()->get('doctrine.cli');
现在您可以在命令行界面上调用doctor-module.php
orm:generate-entities --generate-annotations=1 PATH_TO_YOUR_ENTITY_CLASSES
小心使用名称空间。YAML驱动程序要求namespace.entity.dcm.yml是\namespace\entity YAML文件的名称。该工具将为您创建路径\u到\u ENTITY\u CLASSES\Namespace\ENTITY.php
如果您想更经常地使用这种方法,那么沿着以下思路和方法扩展条令\ORM\Tools\Console\CommandGenerateEntitiesCommand可能会更简洁 要解决此问题,请确保已生成实体并为其指定名称空间。您的命令行应该如下所示:
vendor/doctrine/doctrine-module/bin/doctrine-module orm:convert-mapping annotation module/MyNamespace/src/ --namespace="MyNamespace\Entity\\" --from-database
如果没有选项--namespace,您的实体将不在名称空间内,因此条令无法找到您的实体
从这里,您可以使用其他条令命令,如orm:generate repositories(您需要配置指定存储库名称的实体),如下所示:
<?php
namespace MyNamespace\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* User
*
* @ORM\Table(name="user")
* @ORM\Entity(repositoryClass="MyNamespace\Repository\UserRepository")
*/
class User
{
.....
}
在module.config.php上以这种方式配置您的条令驱动程序
'doctrine' => array(
'driver' => array(
'orm_default' => array(
'drivers' => array(
'Application\Entity' => 'application_entities_yaml'
//replace Application by your module namespace
),
),
'application_entities_yaml' => array(
'class' => 'Doctrine\ORM\Mapping\Driver\YamlDriver',
'paths' => array(__DIR__ . '/../src/' .__NAMESPACE__. '/Yml/')
//should be where are yours Yml files.
),
),
),
Doctrine CLI位于/vendor/bin
中,命令如下:我没有要处理的元数据类。CLI未找到我的yml文件,我尝试配置doctrine以使用yaml驱动程序,但没有帮助。DoctrineModule不正式支持实体生成?我在上尝试了您的教程,您使用/vendor/bin/doctor模块orm:schema工具:create
生成了模式。我不确定我是否理解…@AlexMA我作为项目维护者,不支持该功能:-)好的,我想我理解;当我更新我的模式时,我应该使用核心原则。