【发布时间】:2015-07-16 08:28:02
【问题描述】:
我今天来找你是因为我的 Symfony 项目遇到了问题。我想将服务限制为特定主机。该项目包括用于不同类型用户的多个界面。问题是我只需要为特定主机声明一些服务,以免干扰其他接口。
我尝试在服务定义中添加 host 子句,但 Symfony 不接受它。临时的解决方案是检查服务内部的主机,但它不干净..
感谢所有提供帮助的人!
咻!
【问题讨论】:
我今天来找你是因为我的 Symfony 项目遇到了问题。我想将服务限制为特定主机。该项目包括用于不同类型用户的多个界面。问题是我只需要为特定主机声明一些服务,以免干扰其他接口。
我尝试在服务定义中添加 host 子句,但 Symfony 不接受它。临时的解决方案是检查服务内部的主机,但它不干净..
感谢所有提供帮助的人!
咻!
【问题讨论】:
我会坚持使用服务内的支票;当然你应该使用配置参数而不是硬编码主机,这样你就可以在不编辑服务的情况下更改主机或禁用检查。
编辑:完整示例
class MyService
{
public function __construct($container, $request)
{
$this->container = $container;
$this->request = $request;
}
public function doSomething()
{
if ( ! $this->checkHostRestrictions()) {
return;
}
// ... do something
}
private function checkHostRestrictions()
{
$allowedHost = $this->container->getParameter('myServiceAllowedHost', '');
if (empty($allowedHost)) {
// here I assume that if I don't set an allowed host, all are allowed
// you can easily change the logic
return true;
}
$clientIp = $this->request->getClientIp();
if ($clientIp == $allowedHost) {
return true;
}
return false;
}
}
附:当然你也可以传递单个参数而不是完整的容器,但我觉得这不是问题的真正主题。
【讨论】: