我是symfony的新手,我想从其他控制器调用基本控制器功能。主要目的是为所有控制器都有一些通用的进程(代码)所以我在基本控制器中做了一个通用的功能,所以我能够从sonata管理控制器以及其他普通控制器的每个控制器访问功能但是我不知道这个,任何人都可以知道这个然后建议我。提前致谢
答案 0 :(得分:0)
您可以将控制器定义为服务,然后在另一个控制器中获取。
在您的services.yml中将所需的控制器定义为服务:
services:
service_name:
class: BundleName\Controller\YourControllerName
然后在任何控制器中,您都可以通过容器获得此服务:
$otherController = $this->get('service_name');
$otherController->methodName();
答案 1 :(得分:0)
由于默认情况下Symfony服务现在是私有的,因此只注入所需的控制器会更清洁。
class AppController extends AbstractController
{
private ImportService $importService;
private ParameterBagInterface $bag;
private BillRepository $billRepository;
public function __construct(ImportService $importService, ParameterBagInterface $bag, BillRepository $billRepository)
{
$this->importService = $importService;
$this->bag = $bag;
$this->billRepository = $billRepository;
}
/**
* @Route("/app_load", name="app_load")
*/
public function load()
{
// import, or whatever.
现在注入控制器。例如,在教义的装置加载器中。
namespace App\DataFixtures;
use App\Controller\AppController;
use App\Services\ImportService;
use Doctrine\Bundle\FixturesBundle\Fixture;
use Doctrine\Persistence\ObjectManager;
use Psr\Log\LoggerInterface;
class AppFixtures extends Fixture
{
private AppController $appController;
private LoggerInterface $logger;
public function __construct(AppController $appController, LoggerInterface $logger)
{
$this->appController = $appController;
$this->logger = $logger;
}
public function load(ObjectManager $manager)
{
$this->appController->load();
$this->logger->info("Loaded.");
}
}