Magento 2 कस्टम व्यवस्थापक कार्रवाई डैशबोर्ड पर पुनर्निर्देशित


18

मैं Magento के 2 फंडामेंटल डेवलपमेंट कोर्स ले रहा हूं और एडमिन राउटर / कंट्रोलर एक्सरसाइज डेट ऑफ आउट हो गया है। राउटर काम करता है, लेकिन नियंत्रक नहीं करता है, यह हमेशा व्यवस्थापक होमपेज पर केवल पुन: मार्ग करता है। राउटर ऐप के लिए कोड / कोड / प्रशिक्षण / परीक्षण / आदि / adminhtml / मार्गों। 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>

एडमिन कंट्रोलर ऐप / कोड / ट्रेनिंग / टेस्ट / कंट्रोलर / एडमिनिस्ट्रेटर / एक्शन / इंडेक्स.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;
    }
}

जब मैं एडमिन / टेस्ट / एक्शन / इंडेक्स के एडमिन यूआरएल पर जाता हूं तो यह सिर्फ रीडायरेक्ट होता है और कुछ भी नहीं होता है। अगर मैं एक कंस्ट्रक्टर जोड़ता हूं और xdebug का उपयोग करता हूं, तो यह दर्शाता है कि यह कंट्रोलर कंस्ट्रक्टर तक पहुंचता है, लेकिन यह कभी भी निष्पादित भाग को नहीं करता है। मुझे किसकी याद आ रही है?


मुझे आशा है कि आपके कोड फ़ंक्शन _isAllowed वापसी सही है। उदाहरण में "वापसी" निर्देश अनुपस्थिति है
KAndy

@ हां, हां यह धन्यवाद है, हालांकि। यह दिखाने के लिए मेरे सवाल का संपादन किया।
केविन शावेज

जवाबों:


22

ऐसा तब होता है क्योंकि जब आप URL को मैन्युअल रूप से टाइप करते हैं तो 'सीक्रेट की' गायब होती है। गुप्त कुंजी सुविधा डिफ़ॉल्ट रूप से सक्षम है और यहां अक्षम किया जा सकता है Stores => Configuration => Advanced => Admin => Security => Add Secret Key to URLs:। तब आपको अपनी कार्रवाई तक पहुंचने में सक्षम होना चाहिए।


@ एलेक्स पालीरुश, सुरक्षा कुंजी सक्षम होने पर यह काम कैसे करें?
असवंत

@Aswanth बस मेनू में अपनी कार्रवाई जोड़ें, और उस पर क्लिक करें। इस मामले में
मैगेंटो

@AlexPaliarush धन्यवाद यह मेरे लिए काम करता है .. और मेरे समय को बचाया
ZOE RULE

यह समस्या थी लेकिन अभ्यास में इस स्थिति के बारे में पाठ्यक्रम क्यों नहीं कहता? मैं कुछ घंटे यह जाँच खो दिया ... Grrrrrrr
बिनोद - GoFundMonica

सही जवाब !!! +1 :) ने मेरा दिन बना दिया
सागरपंचल

12

में router.xmlफ़ाइल ( companyName/customModule/etc/adminhtml/router.xml) मेरे लिए समाधान मार्ग आईडी होना था और 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">और अब मैं एक बुनियादी नियंत्रक काम कर सकता हूं जैसा कि प्रश्न निकाय में वर्णित है। फिर भी मेरे कस्टम नियंत्रकों के साथ कोई भाग्य नहीं। संपादित करें: वास्तव में मेरे कस्टम नियंत्रकों में से एक ने कुछ त्रुटियां देना शुरू कर दिया। एरोरर्स के साथ पुनर्निर्देशित की तुलना में बहुत बेहतर है।
एड्रियन मोइसा

4

शायद उस संपत्ति का उपयोग करना बेहतर है:

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

2

बैकएंड में मॉड्यूल / कार्यक्षमता का उपयोग करने का प्रयास करते समय (एडमिनबुक), मैगेंटो गुप्त की उपस्थिति के लिए जांच करता है Form Keys, और यदि / जब कोई व्यक्ति किसी कार्रवाई तक पहुंचने का प्रयास करता है और फॉर्मकेई की आपूर्ति नहीं करता है (जैसे: यूआरएल को हॉटलिंक करना) और / या अमान्य फॉर्मके की आपूर्ति करता है - Adminhtml AbstractAction (Magento \ Backend \ App \ AbstractAction) उपयोगकर्ता व्यवस्थापक UIX परिभाषित स्टार्टअप पृष्ठ (जो आमतौर पर डैशबोर्ड पृष्ठ है) को रूट करेगा

[यह तंत्र उपयोगकर्ताओं को बैकएंड के उन हिस्सों तक पहुँचने से रोकने के लिए एक "सुरक्षा चौकी" प्रदान करता है, जिनके पास उनकी पहुँच नहीं है]


व्यवस्थापक UIX मेनू से विकल्पों तक पहुंचते समय - Magento स्वचालित रूप से आपके लिए FormKey जोड़ देगा।


FormKey के लिए चेक को रोकने के लिए आपके पास दो विकल्प हैं:

(ए) फॉर्मके सत्यापन बंद करें

नेविगेशन: स्टोर -> सेटिंग्स: कॉन्फ़िगरेशन -> उन्नत: व्यवस्थापक -> सुरक्षा -> सेटअप "URL में गुप्त कुंजी जोड़ें" से "नहीं"

यह याद रखना बहुत महत्वपूर्ण है कि ऐसा करने से गुप्त कुंजी सत्यापन बंद हो जाएगा, और इसलिए यह आपके आवेदन को कमजोर बना सकता है।

फॉर्मके वैलिडेशन कैसे बंद करें

(b) अपने नियंत्रक के लिए फॉर्मके सत्यापन बंद करें

अपने व्यवस्थापक नियंत्रक के "$ _publicActions" विशेषता में, फॉर्मकेय चेक से, आप जो छूट देना चाहते हैं, उसे निर्दिष्ट करें।

संरक्षित $ _publicActions = ['ENTER_NAME_OF_ACTION'];

कोड उदाहरण:

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

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

}

1

सक्षम सुरक्षा कुंजी के साथ रूटिंग पुनर्निर्देशन की समस्या मेनू / xml / / / के तहत मेनू में एक्शन यूआरएल सेट है।

<?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>

महत्वपूर्ण मूल्य मेनू आइटम में एक्शन पैरामीटर है। मार्गों में घोषित मॉड्यूल का नाम सेट करने के लिए ध्यान दें। आईडी पैरामीटर आईडी में। मेरे मामले में: "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()) ?>" /> मदद करेगा

लेकिन आप विक्रेता / Magento / मॉड्यूल-बैकेंड / ऐप / AbstractAction.php के लिए एक ईंट जोड़ सकते हैं

if (!$_isValidFormKey || !$_isValidSecretKey) {}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.