ダッシュボードにリダイレクトされるMagento 2カスタム管理アクション


18

Magento 2の基礎開発コースを受講していますが、管理ルーター/コントローラーの演習は古くなっているようです。ルーターは機能しますが、コントローラーは機能せず、常に管理者ホームページに再ルーティングします。ルーターapp / code / Training / Test / etc / adminhtml / routes.xmlのコード

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/framework/App/etc/routes.xsd">
<router id="admin">
    <route id="test" frontName="test">
        <module name="Training_Test" before="Magento_Backend" />
    </route>
</router>
</config>

管理コントローラーapp / code / Training / Test / Controller / Adminhtml / Action / Index.phpのコード

<?php

namespace Training\Test\Controller\Adminhtml\Action;
class Index extends \Magento\Backend\App\Action
{

public function execute()
    {
    die("test reached controller");
    }
protected function _isAllowed() {
    return true;
    }
}

admin / test / action / indexの管理URLにアクセスすると、リダイレクトされるだけで何も起こりません。コンストラクターを追加してxdebugを使用すると、コントローラーコンストラクターに到達することが示されますが、実行部分は実行されません。私は何が欠けていますか?


あなたのコード関数で_isAllowedがtrueを返すことを願っています。例では、「リターン」命令が不在である
キャンディ

@KAndyはい、ありがとうございます。それを示すために私の質問を編集しました。
ケビンチャベス

回答:


22

これは、URLを手動で入力するだけで「秘密キー」が見つからないために発生します。秘密鍵機能はデフォルトで有効になっており、ここで無効にできますStores => Configuration => Advanced => Admin => Security => Add Secret Key to URLs。その後、アクションに到達できるはずです。


@Alex Paliarush、セキュリティキーが有効になっているときにこれを機能させる方法は?
アスワン16

@Aswanthメニューにアクションを追加して、クリックするだけです。この場合、Magentoは適切なセキュリティキーをリクエストに追加します
Alex Paliarush

@AlexPaliarushおかげでそれは私のために働く...と私の時間保存
ZOE RULE

これが問題でしたが、なぜこの演習でこの状態について説明しないのですか?これを確認するのに数時間かかりました... Grrrrrrr
Binod-GoFundMonica

完璧な答え!!! +1 :)私の一日
SagarPPanchal

12

router.xml、ファイル(companyName/customModule/etc/adminhtml/router.xml私にとって)ソリューションは、ルートIDを持っていることだったとfrontNameは同じ値を持っています。あなたの場合、これは次のようになります:

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../lib/internal/Magento/Framework/App/etc/routes.xsd">
    <router id="admin">
        <route id="asw_advanved" frontName="asw_advanved">
            <module name="Asw_Sample" before="Magento_Backend"/>
        </route>
    </router>
</config>

変更 <route id="Bmanager" frontName="bmanager"><route id="bmanager" frontName="bmanager">質問本体を説明するように、今、私は基本的なコントローラを動作させることができます。私のカスタムコントローラーにはまだ運がありません。編集:実際、カスタムコントローラーの1つでエラーが発生し始めました。エラーなしでリダイレクトするよりもはるかに優れています。
エイドリアンモイサ

4

たぶん、そのプロパティを使用する方が良いでしょう:

/**
 * Array of actions which can be processed without secret key validation
 *
 * @var array
 */
protected $_publicActions = ['action_name'];

2

バックエンド(Adminhtml)のモジュール/機能にアクセスしようとすると、Magentoはシークレットの存在を確認し、Form Keys誰かがアクションにアクセスしようとしてFormKeyを提供しない場合(例:URLのホットリンク)および/または無効なFormKeyを指定します-Adminhtml AbstractAction(Magento \ Backend \ App \ AbstractAction)は、ユーザー管理UIXの定義されたスタートアップページ(通常はダッシュボードページ)をルーティングします

[このメカニズムは、ユーザーがアクセス権のないバックエンドの一部にアクセスできないようにする「セキュリティチェックポイント」として機能します]


Admin UIXメニューからオプションにアクセスすると、Magentoは自動的にFormKeyを追加します。


FormKeyのチェックを防ぐには、2つのオプションがあります。

(a)FormKey検証をオフにする

ナビゲーション:ストア->設定:構成->詳細:管理->セキュリティ->「URLに秘密鍵を追加」を「いいえ」に設定

これを行うと、秘密鍵の検証がオフになるため、アプリケーションが脆弱になる可能性があることを覚えておくことが非常に重要です。

FormKey検証を無効にする方法

(b)コントローラーのFormKey Validationをオフにします

管理者コントローラーの「$ _publicActions」属性で、FormKeyチェックから除外するアクションを指定します。

protected $ _publicActions = ['ENTER_NAME_OF_ACTION'];

コード例:

class Index extends \Magento\Backend\App\Action
{
    protected $_publicActions = ['index'];

    public function execute()
    {
        echo "My Hello World! Controller";
    }

}

1

セキュリティキーを有効にしたルーティングリダイレクトの問題は、/ etc / adminhtml /の下のmenu.xmlで設定されたアクションURLです

<?xml version="1.0" ?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Backend:etc/menu.xsd">
    <menu>
        <add id="Mycompany_Mymodule::top_level" module="Mycompany_Mymodule" resource="Magento_Backend::content" sortOrder="9999" title="My Module" parent="Magento_Sales::sales"/>
        <add action="mycompany_mymodule/profile/index" id="Mycompany::mycompany_mymodule_profile" module="mycompany_Mymodule" parent="Mycompany_Mymodule::top_level" resource="Magento_Backend::content" sortOrder="9999" title="My Module"/>
    </menu>
</config>

重要な値は、メニュー項目のアクションパラメーターです。routes.xmlで宣言されたモジュールの名前をidパラメーターに設定するよう注意してください。私の場合:「mycompany_mymodule」

<?xml version="1.0" ?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:App/etc/routes.xsd">
    <router id="admin">
        <route frontName="mymodule" id="mycompany_mymodule">
            <module before="Magento_Backend" name="Mycompany_Mymodule"/>
        </route>
    </router>
</config>

0

<input name="form_key" type="hidden" value="<?php echo $block->escapeHtml($block->getFormKey()) ?>" /> 役立ちます

しかし、vendor / magento / module-backend / App / AbstractAction.phpにブリックポイングを追加することができます

if (!$_isValidFormKey || !$_isValidSecretKey) {}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.