小编Ser*_*pov的帖子

在JavasScript ECMAScript 6中从字符串创建对象

我想使用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)

我做错了什么?

javascript ecmascript-6 babeljs

10
推荐指数
3
解决办法
3848
查看次数

在 Symfony 中使用 Action 类代替 Controller

我坚持使用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)

action symfony symfony4

6
推荐指数
2
解决办法
3515
查看次数

标签 统计

action ×1

babeljs ×1

ecmascript-6 ×1

javascript ×1

symfony ×1

symfony4 ×1