在 PHP 中限制对 setter 的访问?
Restrict access to setter in PHP?
我有一项服务,由控制器提供一些数据。
现在,我通过全局注入将该服务暴露给 Twig:
globals:
my_service: '@AppBundle\Service\MyService'
我怎样才能阻止在 Twig 页面上工作的人打电话给例如
my_service.setData('blah')?
因为我只希望控制器将数据写入其中。
我只希望 Twig 能够读取数据:
my_service.getData()
您可以创建另一个服务,我们称它为 MyDataProvider,并将其设置为只读。伪代码:
AppBundle\DataProvider\MyDataProvider:
$myService: '@AppBundle\Service\MyService'
globals:
my_data_provider: '@AppBundle\DataProvider\MyDataProvider'
然后,只在 MyDataProvider 中代理来自 MyService 的 getter:
class MyDataProvider {
private $myService;
public function __construct(MyService $myService) {
$this->myService = $myService;
}
// proxy allowed methods, use __get(), or anything else you like
public function getWhatever() {
return $this->myService->getWhatever();
}
// deny, throw exception, or don't implement at all
public function setWhatever() {
throw AccessDeniedException
}
}
至于为 所有 其他 类 提供 MyService - 你可以注入它,或者只提供给标记的服务(正如你所注意到的,只有控制器应该写入它),以适合您的方式为准。
我有一项服务,由控制器提供一些数据。 现在,我通过全局注入将该服务暴露给 Twig:
globals:
my_service: '@AppBundle\Service\MyService'
我怎样才能阻止在 Twig 页面上工作的人打电话给例如
my_service.setData('blah')?
因为我只希望控制器将数据写入其中。 我只希望 Twig 能够读取数据:
my_service.getData()
您可以创建另一个服务,我们称它为 MyDataProvider,并将其设置为只读。伪代码:
AppBundle\DataProvider\MyDataProvider:
$myService: '@AppBundle\Service\MyService'
globals:
my_data_provider: '@AppBundle\DataProvider\MyDataProvider'
然后,只在 MyDataProvider 中代理来自 MyService 的 getter:
class MyDataProvider {
private $myService;
public function __construct(MyService $myService) {
$this->myService = $myService;
}
// proxy allowed methods, use __get(), or anything else you like
public function getWhatever() {
return $this->myService->getWhatever();
}
// deny, throw exception, or don't implement at all
public function setWhatever() {
throw AccessDeniedException
}
}
至于为 所有 其他 类 提供 MyService - 你可以注入它,或者只提供给标记的服务(正如你所注意到的,只有控制器应该写入它),以适合您的方式为准。