使用Symfony4使用参数创建动态函数

时间:2018-08-27 17:46:55

标签: symfony symfony4

我是symfony 4的新手,并且已经完成了CRUD。我想通过创建一个减少代码的功能来增强代码。

示例:

如果您有2个模块,例如管理事件和公告(当然,您将在此处添加,获取全部,删除和更新)。而不是像这样长代码。

// We want to know the rgba values for this color name:
var testColor = "salmon"

// make a canvas
var canvas = $('<canvas width="100px" height="100px">');

// optional: display the canvas
var body = $(document.body);
canvas.appendTo(body);

// draw a rectangle on the canvas
var context = canvas[0].getContext("2d");
context.beginPath();
context.rect(0,0,100,100);
context.fillStyle = testColor;
context.fill();

// get the canvas image as an array
var imgData = context.getImageData(0, 0, 10, 10);
// rbga values for the element in the middle
var array = imgData.data.slice(50*4, 50*4+4);
// convert the opacity to 0..1
array[3] = array[3] / 255.0;

$("<div>The rgba for " + testColor + " is " + array + "</div>").appendTo(body);

我想像$ fetch = $ this-> fetch(Event :: class);那样做短我在服务目录中创建了一个新文件。

Service \ Crud.php

 $fetch_item = $this->getDoctrine()
                    ->getRepository(Event::class)
                    ->findAll();

控制器

<?php 

namespace App\Service;

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;

/**
 * 
 */
class Crud extends AbstractController
{

    public function __construct(){
        parent::__construct(); 
    }

    public function fetch($table)
    {
        $fetch_item = $this->getDoctrine()
                        ->getRepository($table)
                        ->findAll();

        return $fetch_item;
    }
}


?>

上面是我的代码,但是它给我一个错误“试图调用类“ App \ Controller \ ItemController”的未定义方法,名为“ fetch””

问题:如何创建一个减少代码的函数?

1 个答案:

答案 0 :(得分:2)

没有理由让fetch函数成为控制器的一部分(相反,有很多理由不存在)。您需要的是一项简单的服务:

<?php

namespace App\Service;

use Doctrine\ORM\EntityManagerInterface;

class CrudService {

    protected $em;

    public function __construct(EntityManagerInterface $em){
        $this->em = $em;
    }

    public function fetch($entityClass) {

        return $this->em->getRepository($entityClass)->findAll();

    }
}

然后在您的控制器中,您只需通过自动装配将其注入并使用它即可:

<?php

namespace App\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use App\Service\CrudService;
use App\Entity\Item;
...

class EventController extends AbstractController {
    public function index(CrudService $crudService) {
        $items = $crudService->fetch(Item::class);

        return $this->render('base.html.twig',array(
            'items' => $items
        ));
    }

}