Ограничить доступ к сеттеру в PHP? - PullRequest
0 голосов
/ 22 ноября 2018

У меня есть служба с некоторой подачей данных контроллером.Теперь я предоставил этот сервис Twig, введя его глобально:

globals:
    my_service: '@AppBundle\Service\MyService'

Как я могу запретить кому-либо, работающему на странице Twig, звонить, например,

my_service.setData('blah')?

Как я только хотелконтроллер для записи данных в него.И я только хочу, чтобы Twig мог читать данные:

my_service.getData()

1 Ответ

0 голосов
/ 22 ноября 2018

Вы можете создать другой сервис, назовем его MyDataProvider и сделать его доступным только для чтения.Псевдокод:

AppBundle\DataProvider\MyDataProvider:
  $myService: '@AppBundle\Service\MyService'

globals:
    my_data_provider: '@AppBundle\DataProvider\MyDataProvider'

И затем, только прокси получатели из MyService в MyDataProvider:

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 - вы можете добавитьон или только предоставляет помеченные сервисы (как вы заметили, в него должны писать только контроллеры), в зависимости от того, что вам подходит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...