Intereting Posts
Создание объектов PHP и использование памяти Загрузка видео на Youtube с использованием API данных Youtube V3 и клиента API Google PHP – получение сообщения 401 (несанкционированное) Пользовательский вход с htaccess через HTML / PHP Динамически добавлять данные в массив Слияние двух изображений PNG с библиотекой PHP GD php неуспешный цикл while в подготовленных операциях Клиент Java Webservice UsernameToken эквивалентен PHP Повторение нескольких значений флажка в PHP Обтекание элементов массива в div, основанных на одном значении Как немедленно выполнить анонимную функцию в PHP? Попытка сохранить массив hasMany из нескольких select Как подпись PHAR предотвращает несанкционированное использование файлов? Когда использовать session_start ()? Самый простой способ для ссылки на проверку электронной почты PHP Как создать вложенный многомерный массив из массива результатов базы данных с родительским идентификатором

Параметры обслуживания Symfony 2

Один из параметров, которые я хочу передать службе при ее создании, является результатом вычисления строки, основанного на некоторых пользовательских вводах. Как это может быть достигнуто автоматически, так что мне не нужно передавать значения в объект каждый раз, когда я хочу получить к нему доступ с другого контроллера?

Для иллюстрации я добавляю следующий пример:

Я инкапсулировал Instagram API в Сервис, следуя документации (блестящей), поэтому записывая $instagram = $this->get('instagram'); в моем коде почти работает, так как для связи с API мне нужно также установить URL-адрес обратного вызова, который я всегда должен делать после получения службы, например:

  $redirect_url = $this->getRequest()->getSchemeAndHttpHost().$this->generateUrl('_instagram_authenticate_response'); $instagram = $this->get('instagram'); $instagram->setApiCallback($redirect_url); 

Это нормально делать это один раз, но не в каждом методе фриланса, который я использую, когда я разговариваю с instagram. Пожалуйста помоги 🙂

Обновление: определение моего сервиса выглядит следующим образом:

 parameters: client_id: xxxxx client_secret: yyyyy services: instagram: class: Clops\InstagramBundle\InstagramAPI arguments: ["%client_id%", "%client_secret%"] 

Вопрос в том, что -> как передать третий параметр в качестве значения, сгенерированного в контроллере? Или мне всегда нужно делать это через setValue (X) после получения услуги?

Это похоже на проблему инъекций зависимостей.
Как упоминалось, вам просто нужно передать @router и @request в качестве параметра вашего сервиса.

Тем не менее, это кажется единственной зависимостью, потому что мой образ мышления

Вы должны создать метод handleApiCallback который будет вызван сразу после instanciation, в котором вы передадите @router и @request
Это позволяет вашему классу не сильно привязываться к Symfony

В качестве дополнительной заметки вы не можете напрямую передать @request в качестве параметра, вам нужно объявить свою службу как request-scoped

services.yml

 services: instagram: class: Clops\InstagramBundle\InstagramAPI scope: request arguments: - %client_id% - %client_secret% calls: - [ handleApiCallback, [ @request, @router ] ] 

Clops \ InstagramBundle \ InstagramAPI

 use Symfony\Component\HttpFoundation\Request; use Symfony\Component\Routing\RouterInterface; class InstagramApi { public function handleApiCallback(Request $request, RouterInterface $router) { $host = $request->getSchemeAndHttpHost(); $route = $router->generateUrl('_instagram_authenticate_response'); $uri = $host.$route; $this->setApiCallback($uri); } } 
  1. Вы можете создать свой параметр внутри службы. В вашей ситуации вы можете передать request и router для обслуживания и выполнения работы.

  2. Создайте базовый контроллер, который будет иметь метод getInstagram() .

     public function getInstagram() { $redirect_url = $this->getRequest()->getSchemeAndHttpHost().$this->generateUrl('_instagram_authenticate_response'); $instagram = $this->get('instagram'); $instagram->setApiCallback($redirect_url); return $instagram; }