【发布时间】:2020-02-06 11:28:18
【问题描述】:
我正在尝试自定义 maker:crud。
官方文档和The Symfony MakerBundle 表示“您可以创建自己的 make: ... 命令重用此捆绑提供的工具。为此,您应该在您的 src/ 中创建一个扩展 AbstractMaker 的类。制造商/目录”。
所以我的第一步是从存储库中复制,这也在文档中指出,脚本 MakeCrud.php 在 src/Maker/MakeCustomCrud.php (我重命名它)。我应用了一些基本更改,例如重命名类和命令名称。
准备好可用的命令后,我正在等待在命令之间查看一些 make:custom-crud。显然,当尝试调用它时 (php bin/console make:custom-crud) 我被告知 Command "make:custom-crud" 没有定义。我做错了什么,我不知道是什么。
我抄录下面的部分代码src/Maker/MakeCustomCrud.php:
<?php
/*
* This file is part of the Symfony MakerBundle package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Bundle\MakerBundle\Maker;
use Doctrine\Bundle\DoctrineBundle\DoctrineBundle;
use Doctrine\Common\Inflector\Inflector;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
use Symfony\Bundle\MakerBundle\ConsoleStyle;
use Symfony\Bundle\MakerBundle\DependencyBuilder;
use Symfony\Bundle\MakerBundle\Doctrine\DoctrineHelper;
use Symfony\Bundle\MakerBundle\Generator;
use Symfony\Bundle\MakerBundle\InputConfiguration;
use Symfony\Bundle\MakerBundle\Renderer\FormTypeRenderer;
use Symfony\Bundle\MakerBundle\Str;
use Symfony\Bundle\MakerBundle\Validator;
use Symfony\Bundle\TwigBundle\TwigBundle;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Question\Question;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Csrf\CsrfTokenManager;
use Symfony\Component\Validator\Validation;
/**
* @author Sadicov Vladimir <sadikoff@gmail.com>
*/
final class MakeCustomCrud extends AbstractMaker
{
private $doctrineHelper;
private $formTypeRenderer;
public function __construct(DoctrineHelper $doctrineHelper, FormTypeRenderer $formTypeRenderer)
{
$this->doctrineHelper = $doctrineHelper;
$this->formTypeRenderer = $formTypeRenderer;
}
public static function getCommandName(): string
{
return 'make:custom-crud';
}
/**
* {@inheritdoc}
*/
public function configureCommand(Command $command, InputConfiguration $inputConfig)
{
$command
->setDescription('Creates Custom CRUD for Doctrine entity class')
->addArgument('entity-class', InputArgument::OPTIONAL, sprintf('The class name of the entity to create Custom CRUD (e.g. <fg=yellow>%s</>)', Str::asClassName(Str::getRandomTerm())))
->setHelp(file_get_contents(__DIR__.'/../Resources/help/MakeCrud.txt'))
;
$inputConfig->setArgumentAsNonInteractive('entity-class');
}
【问题讨论】:
-
当我用
App\Maker替换命名空间时,我必须添加一个use Symfony\Bundle\MakerBundle\Maker\AbstractMaker但 Symfony 报告 Cannot autowire service "App\Maker\MakeCustomCrud": argument "$doctrineHelper" of method "__construct ()" 引用类 "Symfony\Bundle\MakerBundle\Doctrine\DoctrineHelper" 但不存在这样的服务。您可能应该将此类别名为现有的“maker.doctrine_helper”服务。 -
我可以使用Symfony4 MakerBundle Own Crud Maker 中提供的解决方案解决错误,但构造函数有第二个
FormTypeRenderer类型的参数,我无法解决。另外,我觉得路径没有经过配置sevices.yaml。我觉得应该更容易。