Questions tagged «di»

表示与Magento 2中的依赖注入有关的问题。

4
Magento 2:仅**运行** setup:di:compile`特定模块?
是否可以为一个特定的模块预先生成代码?IE浏览器-我可以使用以下命令生成系统中的所有代码 php bin/magento setup:di:compile 但是,这可能需要很长时间。我想预先生成只针对特定模块的文件。 php bin/magento setup:di:compile Pulsestorm_Commercebug 我要解决的特定问题是解决此问题,有些插件在开发人员/默认模式下无法识别。
33 php  magento2  di 

2
Magento 2:$ data数组构造函数参数是什么?
因此,我注意到在大多数模型和块中,这array $data = []是构造函数的最后一个参数。 例如 \Magento\Catalog\Block\Product\ListProduct public function __construct( \Magento\Catalog\Block\Product\Context $context, \Magento\Framework\Data\Helper\PostHelper $postDataHelper, \Magento\Catalog\Model\Layer\Resolver $layerResolver, CategoryRepositoryInterface $categoryRepository, \Magento\Framework\Url\Helper\Data $urlHelper, array $data = [] ) { $this->_catalogLayer = $layerResolver->get(); $this->_postDataHelper = $postDataHelper; $this->categoryRepository = $categoryRepository; $this->urlHelper = $urlHelper; parent::__construct( $context, $data ); } 我还知道,在处理首选项时,当添加的参数比原始构造函数更多时,仍必须将该参数保留在构造函数参数列表的末尾。 所以我对这个数组有几个问题: 它是什么 ? 如何使用它 ? 声明添加更多参数的块的首选项时,为什么需要将其保留在构造函数参数列表的末尾?

2
Magento2的xml中所有允许的`xsi:type`值是什么
在Magento 2中,(几乎)在xml文件中列出的所有参数都有一个属性xsi:type,该属性确定如何解释参数的值。 例如,在di.xml后端模块的文件中有以下内容: <argument name="scopeType" xsi:type="const">Magento\Framework\App\Config\ScopeConfigInterface::SCOPE_TYPE_DEFAULT</argument> 这意味着参数scopeType的值是常量的值Magento\Framework\App\Config\ScopeConfigInterface::SCOPE_TYPE_DEFAULT 或这个 <argument name="template" xsi:type="string">Magento_Theme::root.phtml</argument> 这意味着参数的值template是字符串Magento_Theme::root.phtml。 此xsi:type属性的所有可能值是什么?
20 magento2  xml  di 

4
Magento 2:什么是代理类的实际解释?
因此,我从理论上知道Magento 2中的代理类是什么。我已经阅读了有关Alan Storm的精彩文章,并且我完全理解了这些类是如何生成的。 但是,我不知道这是因为我不是英语母语人士,还是Alan的解释是否使用了非常抽象的非核心类,但是我很难理解它的工作原理,特别是何时使用在开发过程中。 因此,让我们以以下示例为核心app/code/Magento/GoogleAdwords/etc/di.xml: <?xml version="1.0"?> <!-- /** * Copyright © 2016 Magento. All rights reserved. * See COPYING.txt for license details. */ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd"> <type name="Magento\GoogleAdwords\Observer\SetConversionValueObserver"> <arguments> <argument name="collection" xsi:type="object">Magento\Sales\Model\ResourceModel\Order\Collection\Proxy</argument> </arguments> </type> </config> 我想知道: 为什么在这种特定情况下使用代理类? 通常,什么时候应该使用代理类?

2
Magento 2:使用语句还是直接类路径?
我可能遗漏了一点,但我只是想知道为什么有时对于特定的类有一个“使用”语句,而有时却没有。 示例:app\code\Magento\Email\Model\Template.php,我们位于文件顶部: namespace Magento\Email\Model; use Magento\Store\Model\ScopeInterface; use Magento\Store\Model\StoreManagerInterface; 然后,在该__construct方法中,我们具有以下参数: public function __construct( \Magento\Framework\Model\Context $context, \Magento\Framework\View\DesignInterface $design, \Magento\Framework\Registry $registry, \Magento\Store\Model\App\Emulation $appEmulation, StoreManagerInterface $storeManager, \Magento\Framework\View\Asset\Repository $assetRepo, \Magento\Framework\Filesystem $filesystem, \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig, \Magento\Email\Model\Template\Config $emailConfig, \Magento\Email\Model\TemplateFactory $templateFactory, \Magento\Framework\Filter\FilterManager $filterManager, \Magento\Framework\UrlInterface $urlModel, \Magento\Email\Model\Template\FilterFactory $filterFactory, array $data = [] ) 因此,我们可以清楚地看到,正如我们use Magento\Store\Model\StoreManagerInterface;在类顶部调用的那样,我们能够StoreManagerInterface $storeManager在构造函数参数中进行操作。 我的问题是: 为什么我们只为一个班级这样做? 为什么我们不能use为构造函数的每个类添加一条语句,以便不必键入完整的类路径? 或反过来,为什么我们不删除该use语句并键入StoreManagerInterfaceclass …


2
为什么有些类在其构造函数和di.xml中都定义了注入?
我不明白为什么在某些类中,它们的依赖项注入要声明两次-一次在di.xml和具体类的构造函数中进行。 例如,在中Magento\Backend\Model\Url,di.xml已定义了以下用于DI的类型集: <type name="Magento\Backend\Model\Url"> <arguments> <argument name="scopeResolver" xsi:type="object"> Magento\Backend\Model\Url\ScopeResolver</argument> <argument name="authSession" xsi:type="object"> Magento\Backend\Model\Auth\Session\Proxy</argument> <argument name="formKey" xsi:type="object"> Magento\Framework\Data\Form\FormKey\Proxy</argument> <argument name="scopeType" xsi:type="const"> Magento\Store\Model\ScopeInterface::SCOPE_STORE </argument> <argument name="backendHelper" xsi:type="object"> Magento\Backend\Helper\Data\Proxy</argument> </arguments> </type> 但是同时,在其具体类中,在注入中需要在di.xml中定义的那些类在构造函数中再次声明: <?php public function __construct( \Magento\Framework\App\Route\ConfigInterface $routeConfig, \Magento\Framework\App\RequestInterface $request, \Magento\Framework\Url\SecurityInfoInterface $urlSecurityInfo, \Magento\Framework\Url\ScopeResolverInterface $scopeResolver, \Magento\Framework\Session\Generic $session, \Magento\Framework\Session\SidResolverInterface $sidResolver, \Magento\Framework\Url\RouteParamsResolverFactory $routeParamsResolverFactory, \Magento\Framework\Url\QueryParamsResolverInterface $queryParamsResolver, \Magento\Framework\App\Config\ScopeConfigInterface …

1
如何在di.xml中动态启用/禁用<preference>?
&lt;preference/&gt;我的di.xml文件之一当前具有以下内容: &lt;preference for="Magento\Contact\Controller\Index\Post" type="RadTest\TestModule\Controller\Contact\Post" /&gt; 我在管理面板中为模块启用/禁用了配置选项。我只希望&lt;preference&gt;在我的自定义配置选项设置为启用时启用。 如何&lt;preference/&gt;根据设置的模块配置动态启用和禁用覆盖?

1
http动词接口的目的
在Magento 2.3中,所有http动词都有一些接口 Magento\Framework\App\Action\HttpPostActionInterface Magento\Framework\App\Action\HttpGetActionInterface, ... 所有的人都是空的并且执行Magento\Framework\App\ActionInterface。 我还发现它们全部都映射app/etc/di.xml到的参数中,Magento\Framework\App\Request\HttpMethodMap并且许多控制器都实现了这些接口。 但并非所有控制器。 这就是我能找到的所有信息。 他们的目的是什么?

2
di.xml常量类型vs init_parameter
我di.xml从核心文件中看到,某些参数具有类型,init_parameter但是参数的值都是常数。 &lt;type name="Magento\Framework\View\Page\Config\Renderer"&gt; &lt;arguments&gt; &lt;argument name="appMode" xsi:type="init_parameter"&gt;Magento\Framework\App\State::PARAM_MODE&lt;/argument&gt; &lt;/arguments&gt; &lt;/type&gt; 或这个 &lt;type name="Magento\Framework\App\Cache\State"&gt; &lt;arguments&gt; &lt;argument name="banAll" xsi:type="init_parameter"&gt;Magento\Framework\App\Cache\State::PARAM_BAN_CACHE&lt;/argument&gt; &lt;/arguments&gt; &lt;/type&gt; 还有很多其他 但是从我在与关联的解释器中看到的内容来看init_parameter,使用了常量解释器Magento\Framework\App\Arguments\ArgumentInterpreter::evaluate public function evaluate(array $data) { return ['argument' =&gt; $this-&gt;constInterpreter-&gt;evaluate($data)]; } 但是结果与 Magento\Framework\Data\Argument\Interpreter\Constant::evaluate public function evaluate(array $data) { if (!isset($data['value']) || !defined($data['value'])) { throw new \InvalidArgumentException('Constant name is expected.'); } return …
8 magento2  di 

2
Magento 2的构造函数中大量的DI类被烦恼-有更好的方法吗?
这时,我很讨厌在我的模块中像下面一样编写类似的构造函数。 public function __construct( \Magento\Framework\Model\Context $context, \Magento\Framework\Registry $registry, /* ... */ \Foo\Bar\Model\Baz $baz, /* ... */ \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [] ) { $this-&gt;registry = $registry; /* ... */ $this-&gt;baz = $baz; /* ... */ /* some awesome stuff */ } 在许多很多情况下,我在模块中都需要相同类的实例。 所以我在问自己,是否可以使用一个或两个提供必要类的中央帮助程序类而不是在每个构造函数中都定义它们,这是一种可接受的方法。 …

2
Magento 2不支持在特征中进行依赖注入?
特质实际上与Magento中的依赖注入一起工作吗?考虑以下代码: 特质班 namespace Frame\Slick\Block; use Frame\Slider\Slick\Block\Data as Helper trait Slick { protected $_slickHelper; public function __construct(Helper $slickHelper) { $this-&gt;_slickHelper = $slickHelper; } } 使用特征类 namespace Frame\Slick\Block; class Product ListProduct implements BlockInterface { use Slick; public function testTrait() { return $this-&gt;_slickHelper-&gt;getHelloWorld(); } } 这似乎总是返回null,非常确定是否正确包含了所有内容。特质真的可以支持依赖注入吗? 编辑:例如,如果您在trait构造函数中执行di并将其分配给trait变量,然后在使用trait的类上对其进行调用,则它将始终返回null。其他都可以。
8 magento2  php  di 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.