Php Symfony2 Sensio GeneratorBundle:在骨架中添加换行符
我创建了自己的GeneratorBundle(基于SensioGeneratorBundle)来创建基于实体的FormType类文件。它像应该的那样生成文件,但问题是在for循环中生成实体的字段时,它将所有代码放在同一行。我希望for循环中生成的代码在每个字段的新行上。我尝试添加Php Symfony2 Sensio GeneratorBundle:在骨架中添加换行符,php,symfony,code-generation,newline,Php,Symfony,Code Generation,Newline,我创建了自己的GeneratorBundle(基于SensioGeneratorBundle)来创建基于实体的FormType类文件。它像应该的那样生成文件,但问题是在for循环中生成实体的字段时,它将所有代码放在同一行。我希望for循环中生成的代码在每个字段的新行上。我尝试添加\n或,但没有成功 命令: php app/console kuma:generate:adminlist Bundle:Entity 命令类: class GenerateAdminListCommand e
\n
或
,但没有成功
命令:
php app/console kuma:generate:adminlist Bundle:Entity
命令类:
class GenerateAdminListCommand extends GenerateDoctrineCommand
{
protected function execute(InputInterface $input, OutputInterface $output)
{
$entity = $input->getOption('entity');
list($bundle, $entity) = $this->parseShortcutNotation($entity);
$entityClass = $this->getContainer()->get('doctrine')->getEntityNamespace($bundle) . '\\' . $entity;
$metadata = $this->getEntityMetadata($entityClass);
$admintypeGenerator = $this->getAdminListTypeGenerator();
$admintypeGenerator->generate($bundle, $entity, $metadata[0]);
我的发电机类别:
class AdminListTypeGenerator extends \Sensio\Bundle\GeneratorBundle\Generator\Generator
{
public function generate($bundle, $entity, $metadata)
{
$parameters = array('namespace' => $bundle->getNamespace(), 'bundle' => $bundle, 'entity_class' => $entityClass, 'fields' => $this->getFieldsFromMetadata($metadata));
$this->renderFile($this->skeletonDir, 'EntityAdminListType.php', $dirPath . '/' . $entity . 'AdminListType.php', $parameters);
}
扩展以下类:
class Generator
{
protected function render($skeletonDir, $template, $parameters)
{
$twig = new \Twig_Environment(new \Twig_Loader_Filesystem($skeletonDir), array(
'debug' => true,
'cache' => false,
'strict_variables' => true,
'autoescape' => false,
));
return $twig->render($template, $parameters);
}
protected function renderFile($skeletonDir, $template, $target, $parameters)
{
if (!is_dir(dirname($target))) {
mkdir(dirname($target), 0777, true);
}
return file_put_contents($target, $this->render($skeletonDir, $template, $parameters));
}
}
这些字段是从元数据中提取的:
public static function getFieldsFromMetadata(ClassMetadata $metadata)
{
$fields = (array) $metadata->fieldNames;
// Remove the primary key field if it's not managed manually
if (!$metadata->isIdentifierNatural()) {
$fields = array_diff($fields, $metadata->identifier);
}
foreach ($metadata->associationMappings as $fieldName => $relation) {
if ($relation['type'] !== ClassMetadata::ONE_TO_MANY) {
$fields[] = $fieldName;
}
}
return $fields;
}
在我的骨架文件中:
public function buildForm(FormBuilder $builder, array $options)
{
{%- for field in fields %}
$builder->add('{{ field }}');
{%- endfor %}
}
这就是基于上述框架生成buildForm()方法时的外观:
public function buildForm(FormBuilder $builder, array $options)
{ $builder->add('ip'); $builder->add('timestamp'); $builder->add('firstname'); $builder->add('lastname'); }
所以我想要$builder->add({field}')
在每个新迭代中创建新行。结果应该如下所示:
public function buildForm(FormBuilder $builder, array $options)
{
$builder->add('ip');
$builder->add('timestamp');
$builder->add('firstname');
$builder->add('lastname');
}
你能试试吗
$builder->add('ip') .'<br/>'. $builder->add('timestamp');
$builder->add('ip')。
$生成器->添加('timestamp');
好的,看来我在同事的帮助下找到了解决方案
问题在于细枝语法中的“-”:
{%- for field in fields %}
那个负号意味着它必须放在一行上。去掉负号成功了
public function buildForm(FormBuilder $builder, array $options)
{
{% for field in fields %}
$builder->add('{{ field }}');
{% endfor %}
}
现在它呈现:
public function buildForm(FormBuilder $builder, array $options)
{
$builder->add('ip');
$builder->add('timestamp');
$builder->add('firstname');
$builder->add('lastname');
}
@umai iqbal好的,我将我的骨架文件编辑成:
public function buildForm(FormBuilder$builder,array$options){{-%for fields%}$builder->add({{field}')(FormBuilder$builder,数组$options){$builder->add('ip');“
'$builder->add('timestamp');”
'$builder->add('firstname');“
'}
问题在于,呈现的对象没有将br或\n视为换行符您的字段是否来自数据库?否,它们是使用类“Sensio\Bundle\GeneratorBundle\Command\GenerateDoctrineCommand”中的SensioGeneratorBundle方法“getEntityMetadata”从类的元数据中提取的。我将尝试编辑我的问题以添加代码的这一部分编辑我的问题,我希望这可以更好地了解发生了什么。您的字段将以一维数组形式出现。尝试在每个条目的末尾添加一个分隔符(我不确定是否有效)尝试将数组转换为二维数组,然后添加二维数组的每个索引。。。