Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

抽象化レイヤー: Symfony/DependencyInjection #35

Open
kiy0taka opened this issue May 9, 2023 · 1 comment
Open

抽象化レイヤー: Symfony/DependencyInjection #35

kiy0taka opened this issue May 9, 2023 · 1 comment
Assignees

Comments

@kiy0taka
Copy link
Contributor

kiy0taka commented May 9, 2023

Symfony\Component\DependencyInjection\Container

PluginControllerで以下のように利用。
Container::underscoreを移植。

            try {
                // プラグイン用設定画面があれば表示(プラグイン用のサービスプロバイダーに定義されているか)
                $configPages[$Plugin->getCode()] = $this->generateUrl(Container::underscore($Plugin->getCode()).'_admin_config');
            } catch (\Exception $e) {

Symfony\Component\DependencyInjection\ContainerInterface

アダプタを作成

Eccube\Controller\ShoppingController

アダプタに置き換え

Eccube\Form\Type\PriceType

パラメータの呼び出しのみ。EccubeConfigで代用

 $this->container->getParameter('currency');

Eccube\Repository\PageRepository

パラメータの呼び出しのみ。EccubeConfigで代用

        $this->userDataRealDir = $container->getParameter('eccube_theme_user_data_dir');
        $this->templateRealDir = $container->getParameter('eccube_theme_app_dir');
        $this->templateDefaultRealDir = $container->getParameter('eccube_theme_src_dir');

Eccube\Service\Composer\ComposerServiceFactory

ComposerServiceFactory自体いらないかも

Eccube\Service\EntityProxyService

パラメータの呼び出しのみ。EccubeConfigで代用

Eccube\Service\MailService

パラメータの呼び出しのみ。EccubeConfigで代用

Eccube\Service\OrderHelper

以下のようなメソッドを作っている。Security関連のアダプタで置き換え。

    private function isGranted($attribute, $subject = null): bool
    {
        return $this->container->get('security.authorization_checker')->isGranted($attribute, $subject);
    }

    private function getUser(): ?UserInterface
    {
        if (null === $token = $this->container->get('security.token_storage')->getToken()) {
            return null;
        }
...

Eccube\Service\PluginService

PluginManagerの各メソッドの引数としてコンテナを渡している
アダプタに置き換え。

Eccube\Service\SystemService

パラメータの呼び出しのみ。EccubeConfigで代用

Eccube\Service\TwoFactorAuthService

利用していない。削除。

@kiy0taka kiy0taka self-assigned this May 9, 2023
@kiy0taka kiy0taka converted this from a draft issue May 9, 2023
@kiy0taka
Copy link
Contributor Author

kiy0taka commented May 9, 2023

ContainerInterface はアダプターではなく、Psr\Container\ContainerInterfaceとして扱えばいいかと思います。基本的にapplicationでは直接$container を利用せずに必要なサービスをInjectionして利用するようにすべきだと思います。
PluginManager もDIできるといいのですが。

@kiy0taka kiy0taka moved this from 🔎 In refinement to 🔖 Ready in next-poc May 9, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
Status: 🔖 Ready
Development

No branches or pull requests

2 participants