Создаю сервисный класс App\Http\OpenWeather Пишу в services.yml типа того
openweather:
class: App\Http\OpenWeather
ну и в контроллере пытаюсь использовать
$weatherService = $this->container->get('openweather');
на что получаю ошибку
Service "openweather" not found: even though it exists in the app's container, the container inside "App\Controller\WeatherController" is a smaller service locator that only knows about the "http_kernel", "parameter_bag", "request_stack", "router" and "session" services. Try using dependency injection instead.
пробовал так же просто вписывать имя класса как аргумент метода типа
public function weather(Request $request, OpenWeather $weatherService)
На это получил ошибку
Cannot determine controller argument for "App\Controller\WeatherController::weather()": the $weatherService argument is type-hinted with the non-existent class or interface: "App\Http\OpenWeather".
пробовал просто создать экземпляр
$weatherService = new OpenWeather();
и тут ошибка
Attempted to load class "OpenWeather" from namespace "App\Http". Did you forget a "use" statement for another namespace?
хотя я использовал use
Как мне все же использовать нужный мне класс в симфони как сервис?
P.S. Произошло необьяснимое - переименовал класс OpenWeather в Weather и заработал use и автовайринг. Но вот контейнер не работает все равно
В symfony 4.2 поддерживается автоматическая регистрация, внедрение и оптимизация Ваших сервисов. Пример конфига config/services.yaml
:
services:
# default configuration for services in *this* file
_defaults:
autowire: true # Automatically injects dependencies in your services.
autoconfigure: true # Automatically registers your services as commands, event subscribers, etc.
public: false # Allows optimizing the container by removing unused services; this also means
# fetching services directly from the container via $container->get() won't work.
# The best practice is to be explicit about your dependencies anyway.
# makes classes in src/ available to be used as services
# this creates a service per class whose id is the fully-qualified class name
App\:
resource: '../src/*'
exclude: '../src/{DependencyInjection,Entity,Migrations,Tests,Kernel.php}'
# ...
данная конфигурация делает классы в src/
доступными для
использования в качестве сервисов
И побольшому счету Вам нужно создать сервис
namespace App\Service;
class OpenWeather {
...
}
Импортировать в каком-нибудь контроллере сервис и вызвать в экшене.
use App\Service\OpenWeather
class HomeController {
private $openWeather;
public __constructor(OpenWeather $openWeather) {
$this->openWeather = $openWeather;
}
public function weather() {
$this->openWeather->getWeather();
...
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Никак не пойму, как сменить раскладку текста - не на "правильную" - просто на противоположнуюДелаю так, но всегда раскладка остается русской:
Прошу помочь с учебным заданием по главе "Интерфейсы":
Как в php 7 загрузить видео и сразу же сделать скирншот видео по середине видео и сохранить его(создать постер к видео) без сторонних ffmepg и тп