Symfony — получить доступ к методу из другого файла в контроллере

Я использую Symfony 3 и пытаюсь получить доступ к классу, который я объявил в

SRC / AppBundle / Услуги / ApiEngine.php

namespace AppBundle\Service;use DateTime;

class ApiEngine {

private $api_handler;

public function __construct($username, bool $repos) {
$client = new \GuzzleHttp\Client();
$request = 'https://api.github.com/users/' . $username;
$request .= ($repos) ?  '/repos' : "";
$res = $client->request('GET', $request);

$this->api_handler = json_decode($res->getBody()->getContents(), true);
}

public function getProfileData() {
return [ /*some data*/ ];
}
}

Я объявил этот файл в

конфиг / service.yml

service:
*
*
*
api:
class: AppBundle\Service\ApiEngine
arguments: ["@username", "@repos"]

В контроллере я пытаюсь использовать некоторые методы ApiEngine, как это:

SRC / AppBundle / Controller / GitApiController.php

namespace AppBundle\Controller;

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; use Symfony\Bundle\FrameworkBundle\Controller\Controller;

class GitApiController extends Controller {

/**
* @Route("/{username}", name ="gitapi", defaults={"username": "symfony"})
*/
public function gitApiAction($username) {
$api = $this->get('api')->__construct($username, false)->getProfileData();

return $this->render('gitapi/index.html.twig', $api);
} }

Но это дает мне эту ошибку:

(1/1) ServiceNotFoundException Служба «API» зависит от
несуществующий сервис «имя пользователя».

1

Решение

Я советую вам изменить ваш класс, например:

private function __construct($username, bool $repos) {
$client = new \GuzzleHttp\Client();
$request = 'https://api.github.com/users/' . $username;
$request .= ($repos) ?  '/repos' : "";
$res = $client->request('GET', $request);

$this->api_handler = json_decode($res->getBody()->getContents(), true);
}

public static function createApiEngine($username, bool $repos)
{
return new self($username, $bool);
}

После того, как внутри вашего контроллера вы можете сделать это:

$api = ApiEngine::createApiEngine($username, false);
$api->getProfileData();

В ваш контроллер нужно вставить use за ApiEngineВ этом случае вам не нужно вводить зависимости, так что внутри services.yml уберите аргументы пожалуйста

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector