我是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””
问题:如何创建一个减少代码的函数?
答案 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
));
}
}