I switched from asp.net core and Laravel to Symfony5. And I have a problem with the my service and the configuration system.Dependency Injection still works even though I turned off autowiring. Also, the settings inside the dev folder do not override those in service.yaml!
What I have tried:
At the src\Services location, I created a simple php class as a simple service:
<pre lang="PHP">
<pre><?php
namespace App\Services;
class HelloService
{
public function sayHello($name='John Doe')
{
return 'Hello ' . $name;
}
}
and TestServiceController to test the service:
<pre><?php
namespace App\Controller;
use App\Services\HelloService;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
class TestServiceController extends AbstractController
{
#[Route('/test', name: 'test_service')]
public function index(HelloService $hs): Response
{
return new Response($hs->sayHello());
}
}
Based on Symfony documentation, since I created the service inside the src\ folder
my service should be automatically visible to the container and supports autowiring by default (services.yaml default conf.). When an application is launched in a dev environment everything works ok and I get it on the website:
Hello John Doe
However, now if I want to turn off autowiring, inside the service.yaml file I wrote:
services:
....
.... rest configs
....
App\Services\HelloService:
autowire: false
and when I run command:
php bin/console debug:container HelloService
i get confirmation that autowired no
However, the app still works and launches:
Hello John Doe
What bothers me is the following:
As I understood the documentation, an exception should be happened becose autowiring now is shutdown, automatic Dependency Injection should be disabled now and specifying the type of class-HelloService in the controller method - public function index (HelloService $ hs) it should be not work and application should throw an exception but it still works OK! Why? !!!
----
Also, overriding service settings does not work for me.
For example, if I have a setting in service.yaml:
services:
....
.... rest configs
....
App\Services\HelloService:
autowire: true
and if I want to override default configs in services.yaml and turn off autowire in a dev environment,
\config\packages\dev\HelloService.yaml :
services:
App\Services\HelloService:
autowire: false
when I run
php bin/console debug: HelloService container
Im still get
autowired: yes
Shouldn't the configurations defined within \packages\dev\<service>.yaml override those in service.yaml ?!
Also, the configurations defined in service_dev.yaml do not override those defined in service.yaml while the documentation claims otherwise or I misunderstood something.
Thank you very much in advance.