我想使用ES6创建对象工厂,但旧式语法不适用于新的.
我有下一个代码:
export class Column {}
export class Sequence {}
export class Checkbox {}
export class ColumnFactory {
constructor() {
this.specColumn = {
__default: 'Column',
__sequence: 'Sequence',
__checkbox: 'Checkbox'
};
}
create(name) {
let className = this.specColumn[name] ? this.specColumn[name] : this.specColumn['__default'];
return new window[className](name); // this line throw error
}
}
let factory = new ColumnFactory();
let column = factory.create('userName');
Run Code Online (Sandbox Code Playgroud)
我做错了什么?
我坚持使用Action Class方法而不是Controller。解释很简单:控制器通常包含许多操作,当遵循依赖注入原则时,我们必须将所有必需的依赖项传递给构造函数,这会导致控制器具有大量依赖项的情况,但在某个时刻(例如请求)我们只使用一些依赖项。维护和测试意大利面条式的代码很困难。
澄清一下,我已经习惯在 Zend Framework 2 中使用这种方法,但它被命名为Middleware。我在 API-Platform 中发现了类似的东西,他们也使用Action 类而不是 Controller,但问题是我不知道如何烹饪它。
UPD:我如何获取下一个操作类并替换标准控制器以及我应该在常规 Symfony 项目中添加哪些配置?
<?php
declare(strict_types=1);
namespace App\Action\Product;
use App\Entity\Product;
use Doctrine\ORM\EntityManager;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
class SoftDeleteAction
{
/**
* @var EntityManager
*/
private $entityManager;
/**
* @param EntityManager $entityManager
*/
public function __construct(EntityManager $entityManager)
{
$this->entityManager = $entityManager;
}
/**
* @Route(
* name="app_product_delete",
* path="products/{id}/delete"
* )
*
* @Method("DELETE") …Run Code Online (Sandbox Code Playgroud)