从我的控制器中,我使用
$this->container->getParameter('my_param')
但是我不知道如何从服务中访问它(我想我的服务类不应该扩展Symfony\Bundle\FrameworkBundle\Controller\Controller
)。
我是否应该像这样将所需的参数映射到我的服务注册中:
#src/Me/MyBundle/Service/my_service/service.yml
parameters:
my_param1: %my_param1%
my_param2: %my_param2%
my_param3: %my_param3%
或者类似的东西?如何从服务访问应用程序参数?
这个问题看起来是一样的,但我实际上回答了它(控制器的参数),我说的是从服务访问。
与其逐个映射所需的参数,为什么不允许您的服务直接访问容器?这样,如果添加了新参数(与服务相关),则不必更新映射。
为此:
对服务类进行以下更改
use Symfony\Component\DependencyInjection\ContainerInterface; // <- Add this
class MyServiceClass
{
private $container; // <- Add this
public function __construct(ContainerInterface $container) // <- Add this
{
$this->container = $container;
}
public function doSomething()
{
$this->container->getParameter('param_name_1'); // <- Access your param
}
}
在services.yml中添加@service_container作为"参数"
services:
my_service_id:
class: ...\MyServiceClass
arguments: ["@service_container"] // <- Add this
自2018年和Symfony 3.4以来,有更干净的方法——易于设置和使用。
您可以通过类的构造函数将参数传递给类,而不是使用容器和服务/参数定位器反模式。别担心,这不是费时费力的工作,而是一次安装
如何分两步进行设置?
# config.yml
parameters:
api_pass: 'secret_password'
api_user: 'my_name'
services:
_defaults:
autowire: true
bind:
$apiPass: '%api_pass%'
$apiUser: '%api_user%'
App\:
resource: ..
<?php declare(strict_types=1);
final class ApiController extends SymfonyController
{
/**
* @var string
*/
private $apiPass;
/**
* @var string
*/
private $apiUser;
public function __construct(string $apiPass, string $apiUser)
{
$this->apiPass = $apiPass;
$this->apiUser = $apiUser;
}
public function registerAction(): void
{
var_dump($this->apiPass); // "secret_password"
var_dump($this->apiUser); // "my_name"
}
}
如果您使用旧的方法,您可以使用Rector自动执行。
这称为服务定位器上的构造函数注入方法。
要了解更多关于此的信息,请查看我的帖子如何在Symfony Controller中获取参数清洁方式。
(它经过测试,我会为新的Symfony主要版本(5,6…)不断更新它)。
通过在服务定义中指定参数,可以以与注入其他服务相同的方式将参数传递给服务。例如,在YAML中:
services:
my_service:
class: My\Bundle\Service\MyService
arguments: [%my_param1%, %my_param2%]
其中,%my_param1%
等对应于名为my_param1
的参数。然后,您的服务类构造函数可以是:
public function __construct($myParam1, $myParam2)
{
// ...
}
我已经通过creat-react-app创建了一个前端应用程序。 命令“npm run start”可以创建一个webpack-dev-server,并为我的 前端应用程序提供开发服务。问题来了: 我的前端应用程序必须从我之前创建的节点服务器请求一些api。 默认情况下create-react-app在端口3000上启动webpack-dev-server 我的节点服务器在端口3001上启动 直接
问题内容: 我需要在本地使用数据库。我已经使用Visual Studio 2012在(LocalDB)\ v11.0 Server中创建了数据库。从例如控制台应用程序进行连接时,一切正常。但是我的应用程序是Windows Service。尝试通过以下方式连接到我的数据库输出: 有什么解决办法吗?也许我应该考虑为此设置其他数据库服务器?如果是,如何设置它使其仅在本地可见? 问题答案: 所以我自己找到
我是超级分类账的初学者。 我目前正在使用开发web服务/应用程序,调用hyperledger-fabric chaincode。例如,我想通过创建一个URL,该URL可能类似于,并且该URL将访问一个hyperledger-fabric链码,该链码可以查询名为abc的用户的资金。 提前谢了。任何帮助都将不胜感激。
主要问题--这看起来像是一个基本的flyway问题,我可能(不知为什么)在我的研究中错过了这个问题,但是--当尝试使用flyway迁移数据时,是否可以访问applications services(spring配置的)?下面的一些细节- 其他详细信息- 我知道我们不能注入spring数据服务等(从这个SO问题中了解到)。我从数据访问的角度理解了这一点。 但是在使用flyway时,我们是否可以不使用
我的问题很简单,也很直观,但几个星期都解决不了。 我在Windows8上使用Docker。(当然是Docker工具箱+VirtualBox)。我把图像推到Docker Hub并使用Kitematic部署R shiny应用程序。 上面的图片显示它正在运行,但我无法通过给定的Docker机器IP 192.168.99.100:32772访问它
我可以在AppEngine应用程序中使用GAE托管的MongoDB吗? 如果是,如何用appengine实例调试此连接问题? 提前谢了。