如何从 symfony 3 中的其他控制器调用控制器功能?
How to call controller function from other controller In symfony 3?
我是 symfony 的新手,我想从其他控制器调用基本控制器功能。背后的主要目的是所有控制器都有一些通用的过程(代码)所以我在基本控制器中创建了一个通用功能所以我能够从奏鸣曲管理控制器以及其他普通控制器中的每个控制器访问功能但我不知道这个,任何人都可以知道这个然后建议我。提前致谢
您可以将您的控制器定义为服务,然后在另一个控制器中获取它。
在您的 services.yml 中将所需的控制器定义为服务:
services:
service_name:
class: BundleName\Controller\YourControllerName
然后在任何控制器中,您都可以通过容器获得此服务:
$otherController = $this->get('service_name');
$otherController->methodName();
因为 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.
现在注入控制器。比如在学说中的fixtures loader.
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.");
}
}
我是 symfony 的新手,我想从其他控制器调用基本控制器功能。背后的主要目的是所有控制器都有一些通用的过程(代码)所以我在基本控制器中创建了一个通用功能所以我能够从奏鸣曲管理控制器以及其他普通控制器中的每个控制器访问功能但我不知道这个,任何人都可以知道这个然后建议我。提前致谢
您可以将您的控制器定义为服务,然后在另一个控制器中获取它。
在您的 services.yml 中将所需的控制器定义为服务:
services:
service_name:
class: BundleName\Controller\YourControllerName
然后在任何控制器中,您都可以通过容器获得此服务:
$otherController = $this->get('service_name');
$otherController->methodName();
因为 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.
现在注入控制器。比如在学说中的fixtures loader.
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.");
}
}