Symfony 4 - 自定义文件夹结构和服务
Symfony 4 - Custom Folder structure and Services
我希望实现 Nikola Posa 推荐的文件夹结构。
我想要的结构如下所示。
src/
Domain/
User/
UserEntity.php
UserController.php
Pages/
DefaultPageController.php
这个想法是逻辑上 group/namespace 功能或类似的内容。我似乎遇到了这个错误:
The file "../src/Controller" does not exist (in: /Users/dev/Sites/web/html/sandbox/php/crud/config) in /Users/dev/Sites/web/html/sandbox/php/crud/config/services.yaml (which is loaded in resource "/Users/dev/Sites/web/html/sandbox/php/crud/config/services.yaml").
我不确定将这些连接为服务有多重要。如果我注释掉 services.yaml
的 App\Controller
属性,它就会消失。
如何使用 src/Domain/Feature/FeatureController.php
结构在 service.yaml 中加载控制器?
你当然可以走老路,单独定义每个控制器服务:
# config/services.yaml
Domain\Feature\FeatureController:
tags: ['controller.service_arguments']
但是,一旦您习惯了自动装配,那么拼出每项服务就很麻烦了。作为替代方案,您可以使用自动配置功能将控制器标签添加到选定的 类。首先声明一个空接口并让您的控制器实现它:
interface ControllerInterface {}
class SomeController implements ControllerInterface
然后调整src/Kernel.php
# src/Kernel.php
class Kernel {
protected function build(ContainerBuilder $container)
{
$container->registerForAutoconfiguration(ControllerInterface::class)
->addTag('controller.service_arguments');
当然这只是解决了控制器的问题。您可能会遇到许多其他与自动装配相关的问题。
我会按照 Cerad 的建议去创建一个 Controller 界面。但是,由于 Symfony 3.3 你不必接触内核:
services:
_instanceof:
YourApp\Ui\ControllerInterface:
public: true
tags: ['controller.service_arguments']
瞧瞧。
我希望实现 Nikola Posa 推荐的文件夹结构。
我想要的结构如下所示。
src/
Domain/
User/
UserEntity.php
UserController.php
Pages/
DefaultPageController.php
这个想法是逻辑上 group/namespace 功能或类似的内容。我似乎遇到了这个错误:
The file "../src/Controller" does not exist (in: /Users/dev/Sites/web/html/sandbox/php/crud/config) in /Users/dev/Sites/web/html/sandbox/php/crud/config/services.yaml (which is loaded in resource "/Users/dev/Sites/web/html/sandbox/php/crud/config/services.yaml").
我不确定将这些连接为服务有多重要。如果我注释掉 services.yaml
的 App\Controller
属性,它就会消失。
如何使用 src/Domain/Feature/FeatureController.php
结构在 service.yaml 中加载控制器?
你当然可以走老路,单独定义每个控制器服务:
# config/services.yaml
Domain\Feature\FeatureController:
tags: ['controller.service_arguments']
但是,一旦您习惯了自动装配,那么拼出每项服务就很麻烦了。作为替代方案,您可以使用自动配置功能将控制器标签添加到选定的 类。首先声明一个空接口并让您的控制器实现它:
interface ControllerInterface {}
class SomeController implements ControllerInterface
然后调整src/Kernel.php
# src/Kernel.php
class Kernel {
protected function build(ContainerBuilder $container)
{
$container->registerForAutoconfiguration(ControllerInterface::class)
->addTag('controller.service_arguments');
当然这只是解决了控制器的问题。您可能会遇到许多其他与自动装配相关的问题。
我会按照 Cerad 的建议去创建一个 Controller 界面。但是,由于 Symfony 3.3 你不必接触内核:
services:
_instanceof:
YourApp\Ui\ControllerInterface:
public: true
tags: ['controller.service_arguments']
瞧瞧。