我嘗試使用服務呼叫控制器中的函式:
#BookManager.php
<?php
namespace App\Service;
use App\Entity\BookContent;
use Doctrine\ORM\EntityManagerInterface;
class BookManager
{
protected $entityManager;
public function __construct(EntityManagerInterface $entityManager)
{
$this->entityManager = $entityManager;
}
public function getBookTitle(string $page){
return $this->entityManager->getRepository(BookContent::class)
>findOneBy(["page"=>$page])->getTitle();
}
在 service.yml
....
services:
book.manager:
class: App\Service\BookManager
arguments: ['@doctrine.orm.entity_manager']
public: true
最后我在 Controller 中呼叫它;
$pageName = $this->container->get('request_stack')->getMasterRequest()->get('_route');
$bookTitle = $this->container->get('book.manager')->getBookTitle($pageName);
但我得到這個錯誤
Service "book.manager" not found: even though it exists in the app's container, the container inside "App\Controller\HomeController" is a smaller service locator that only knows about the "doctrine", "form.factory", "http_kernel", "parameter_bag", "request_stack", "router", "security.authorization_checker", "security.csrf.token_manager", "security.token_storage", "serializer", "session" and "twig" services. Try using dependency injection instead.
任何想法?
編輯
當我使用依賴注入時它是有效的,但只有當我使用 $id 進行查詢時
$this->entityManager->getRepository(BookContent::class)-
>findOneById(["id"=>$id])->getTitle();
當我這樣做時,findOneBy(["page"=>$page])我得到了這個錯誤:
Impossible to access an attribute ("title") on a null variable.
uj5u.com熱心網友回復:
默認情況下,Symfony 5 將自動裝配/自動配置您的服務。您可以book.manager從service.yaml中洗掉。
然后,您可以在控制器中使用依賴注入來訪問您的服務,例如:
<?php
namespace App\Controller;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use App\Service\BookManager; //<-- Add use
class YourController extends AbstractController
{
/**
* @Route("/", name="home")
*/
public function index(Request $request, BookManager $bookManager): Response
{
$pageName = $request->attributes->get('_route');
$bookTitle = $bookManager->getBookTitle($pageName);
return ...
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/525526.html
標籤:交响乐
上一篇:SSRS資料驅動查詢?
