代码之家  ›  专栏  ›  技术社区  ›  Joao Victor Souza

将变量传递并设置到所有控制器-Symfony4

  •  1
  • Joao Victor Souza  · 技术社区  · 6 年前

    如何将变量传递给项目中的所有控制器?

    假设我有一个实体叫做用户,它与公司相关,而公司与产品、客户和其他实体相关。

    当用户进入应用程序时,他将在下拉列表中选择要使用的公司(因为他可以拥有多个公司)。

    现在我正在注入TokenStorageInterface并在我的控制器中执行此操作

    $user = $tokenStorage->getToken()->getUser();
    

    $form->add('company', EntityType::class, [
                    'class' => Company::class,
                    'choice_label' => 'name',
                    'choice_value' => 'id',
                    'label' => 'Company:',
                    'choices' => $user->getCompanies()
                ]);
    

    但问题是,我在每个窗体和每个控制器中重复这段代码,我有很多。 另外,我不想在每个表单中都有一个公司的下拉列表,我想根据他进入应用程序时的选择自动保存公司id,因此所有CRUD操作都将与FK中的公司id一起保存。 如果用户想要更改公司,他只需转到导航栏中的一个固定下拉列表(例如),然后更改它,更改这个全局变量中的ID。

    我怎样才能做到这一点?

    1 回复  |  直到 6 年前
        1
  •  1
  •   kallosz    6 年前

    你可以用 https://symfony.com/doc/4.0/templating/embedding_controllers.html 在你的模板中。

    最好的方法是创建自己的服务,提供必要的逻辑。然后将此服务加载到控制器中,并将此操作嵌入到模板中。