Magento 2 URL'lerinde Ayrılmış Kelimeleri Kullanma


11

Magento 2'de standart yönlendirmeyi kullanarak bir URL'ye şu şekilde yanıt veren bir modül oluşturmak mümkün müdür?

http://magento.example.com/namespace_module/return/index

Yani - ikinci parametrenin PHP için ayrılmış bir anahtar kelime olduğu bir URL . Yukarıdaki sorun bir PHP denetleyicisi sınıf adı oluşturmaktır

Namespace\Module\Controller\Return\Index

ve Returnisim alanında yasadışı PHP var. URL'nin son parametresinin (geleneksel olarak eylem adı verilir) ayrılmış bir anahtar kelime olup olmadığını biliyorum

http://magento.example.com/namespace_module/foo/return

Magento adında bir denetleyici sınıfı oluşturmama izin verdi

Namespace\Module\Controller\Foo\ReturnAction

Ancak, bu ikinci parametre için çalışmaz.

Bunu standart Magento 2 yönlendirme tekniklerini kullanarak yapmanın bir yolu var mı?

Değilse, bu davranışı elde etmek için özel bir yönlendirici nesnesi enjekte etmek için genel olarak kabul edilen en iyi uygulama veya bu sorunu çözmeme izin verecek başka bir teknik var mı? ( aftereklenti açık Magento\Framework\App\Router\ActionListmı?)

Yanıtlar:


7

İçin bir eklenti ekledim Magento\Framework\App\Router\ActionList

<!-- File: app/code/Package/Namespace/etc/di.xml -->
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
    <type name="Magento\Framework\App\Router\ActionList">
        <plugin name="package_module_magento_framework_app_router_actionlist" type="Package\Module\Plugin\Magento\Framework\App\Router\ActionList"/>
    </type>
</config>

ve sonra yöntemin $namespaceparametresi ile uğraştıget

#File: app/code/Package/Module/Plugin/Magento/Framework/App/Router/ActionList.php
public function beforeGet($subject, $module, $area, $namespace, $action)
{
    if($namespace === 'return')
    {
        $namespace = 'returnaction';
    }
    return [$module, $area, $namespace, $action];
}

Bu bana bir sınıf adı verdi

Package\Module\Controller\ReturnAction\Index

Bunun ne kadar iyi bir fikir olduğundan emin değilim, bu yüzden alıcı dikkat edin, vb.


Bu hoş ve kolay görünüyor. Özel olarak, eylem adlarının eylem sınıflarıyla eşleştirildiği şekilde tüm php ayrılmış sözcüklerine genişletilebildiği için. Bir alternatif, özel bir yönlendirici oluşturmak olabilir, ancak bu daha fazla kod gerektirir.
Marius

2
Yalnızca birkaç yorum: 1) Bu, 'return' denetleyicisini kullanmaya çalışan herhangi bir modülün ad alanını değiştirir. Kasıtlı olarak bir 'catchall' oluşturmuyorsanız, kendi modülünüzle eşleştirmek için $ module parametresini kontrol etmek en iyisi olabilir. 2) Adlandırma paritesini korumaya çalışacaksak, döndürülen $ ad alanı muhtemelen 'returnController' olmalıdır - bu da ReturnController ad alanını / dosya yolunu arar. Bu daha sonra yüklenir \Namespace\Module\Controller\ReturnController\Index- ki bu daha doğru olur.
Jeremy Rimpo
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.