ম্যাজেন্টো 2 - কীভাবে কাস্টম ফর্মে ক্যাপচা যুক্ত করা যায়


28

আমি একটি কাস্টম মডিউল বিকাশ করছি যা একটি ফর্ম জমা দেয়। আমি এটিতে একটি ক্যাপচা যুক্ত করতে চাই। এবং আমরা ম্যাজেন্টো ডিফল্ট ক্যাপচা লাইব্রেরিটি ব্যবহার করতে চাই যাতে ক্যাপচা নিবন্ধকরণ ফর্মের সাথে সামঞ্জস্য হয়।

উত্তর:


35

কাস্টম মডিউলটিতে ম্যাজেন্টো ক্যাপচা ব্যবহার করার জন্য আপনাকে কিছু পদক্ষেপ অনুসরণ করতে হবে।

ধাপ 1 : Vendor/Module/etc/config.xml

<? এক্সএমএল সংস্করণ = "1.0"?>
<কনফিগারেশন xMLns: xsi = "http://www.w3.org/2001/XMLSchema-instance" xsi: noNamespaceSchemaLocation = "urn: magento: মডিউল: Magento_Store: etc / config.xsd">
    <ডিফল্ট>
        <গ্রাহক>
            <ক্যাপচা>
                <Shown_to_logged_in_user>
                    <Custom_form> 1 </ custom_form>
                </ Shown_to_logged_in_user>
                <Always_for>
                    <Custom_form> 1 </ custom_form>
                </ Always_for>
            </ ক্যাপচা>
        </ গ্রাহক>
        <ক্যাপচা অনুবাদ = "লেবেল">
            <ফ্রন্টএন্ড>
                <এলাকায়>
                    <Custom_form>
                        <label> কাস্টম ফর্ম </ li>>
                    </ Custom_form>
                </ এলাকার>
            </ ফ্রন্টএন্ড>
        </ ক্যাপচা>
    </ ডিফল্ট>
</ কনফিগ>

পদক্ষেপ 2: যান ' অ্যাডমিন -> স্টোরস -> কনফিগারেশন -> গ্রাহক -> গ্রাহক কনফিগারেশন -> ক্যাপচা ' এবং কনফিগার করুন। আপনি নতুন ফর্মের মূল্য দেখতে পাবেন 'কাস্টম ফর্ম'

পদক্ষেপ 3: তৈরি করুন Vendor/Module/view/frontend/layout/yourroutid_index_index.xml

<? এক্সএমএল সংস্করণ = "1.0"?>
<পেজ xMLns: xsi = "http://www.w3.org/2001/XMLSchema-instance" লেআউট = "1 কলাম" xsi: noNamespaceSchemaLocation = "urn: magento: ফ্রেমওয়ার্ক: দেখুন / লেআউট / ইত্যাদি / পৃষ্ঠা_কন্টিগ্রেশন.এক্সএসডি">
    <Head> -এর
        <শিরোনাম> কাস্টম ফর্ম </ শিরোনাম>
    </ Head> এর
    <Body> এর
        <संदर्भকন্টেনারের নাম = "সামগ্রী">
            <ব্লক ক্লাস = "বিক্রেতা \ মডিউল \ ব্লক \ ক্যাপচাফর্ম" নাম = "যোগাযোগফর্ম" টেমপ্লেট = "বিক্রেতা_মডিউল :: ক্যাপচারফর্ম.ফটিএমএল">
                <ধারক নাম = "form.additional.info" লেবেল = "ফর্ম অতিরিক্ত তথ্য">
                    <block class = "Magento \ ক্যাপচা \ ব্লক \ ক্যাপচা" নাম = "ক্যাপচা" পরে = "-" ক্যাশেবল = "মিথ্যা">
                        <ক্রিয়া পদ্ধতি = "setFormId">
                            <আর্গুমেন্ট নাম = "ফর্মআইডি" এক্সসি: টাইপ = "স্ট্রিং"> কাস্টম_ফর্ম </ translation>
                        </ কর্ম>
                        <ক্রিয়া পদ্ধতি = "setImgWidth">
                            <আর্গুমেন্ট নাম = "প্রস্থ" এক্সসি: টাইপ = "স্ট্রিং"> 230 </argument>
                        </ কর্ম>
                        <ক্রিয়া পদ্ধতি = "setImgHeight">
                            <আর্গুমেন্ট নাম = "প্রস্থ" এক্সসি: টাইপ = "স্ট্রিং"> 50 </argument>
                        </ কর্ম>
                    </ ব্লক>
                </ ধারক>
            </ ব্লক>
        </ ReferenceContainer>
        <संदर्भব্লক নাম = "প্রধান ডটকম্প্টস">
            <ব্লক ক্লাস = "ম্যাজেন্টো me ফ্রেমওয়ার্ক \ ভিউ \ এলিমেন্ট \ জেএস name উপাদানগুলি" নাম = "ক্যাপচা_পেজ_হেড_কম্পন্টস" টেমপ্লেট = "ম্যাজেন্টো_ক্যাপচা :: জেএস / উপাদান.পিএইচটিএমএল" />
        </ ReferenceBlock>
    </ Body> এর
</ পৃষ্ঠা>

পদক্ষেপ 4: Vendor/Module/Block/CaptchaForm.php

নেমস্পেস ভেন্ডর \ মডিউল \ ব্লক;


বর্গ ক্যাপচাফর্ম \ ম্যাজেন্টো me ফ্রেমওয়ার্ক \ দেখুন \ উপাদান \ টেমপ্লেট প্রসারিত করে
{
    পাবলিক ফাংশন getFormAction ()
    {
        ফিরুন $ this-> getUrl ('yourroute / index / post', ['_ সুরক্ষা' => সত্য]);
    }
}

পদক্ষেপ 5: Vendor/Moduel/view/frontend/templates/captchaform.phtml

<ফর্ম শ্রেণি = "ফর্ম যোগাযোগ"
      ক্রিয়া = "<? php / * @ এসকেপ নট যাচাইকৃত * / প্রতিধ্বনি $ block-> getFormAction ();?>"
      আইডি = "পরিচিতির-ফর্ম"
      পদ্ধতি = "পোস্ট"
      ডেটা-hasrequired = "<? php / * @escapeNot যাচাইকৃত * / প্রতিধ্বনি __ ('* প্রয়োজনীয় ক্ষেত্র')?>"
      ডেটা-পুরোনো যাদুকর-init = '{ "বৈধতা": {}}'>
    <ফিল্ডসেট শ্রেণি = "ফিল্ডসেট">
        <কিংবদন্তি শ্রেণি = "কিংবদন্তি"> <স্প্যান> <? পিএইচপি / * @ এসকেপ নট যাচাইকৃত * / প্রতিধ্বনি __ ('আমাদের লিখুন')?> </span> </gege> <br />

        <ডি ক্লাস = "ক্ষেত্রের নাম আবশ্যক">
            <লেবেল শ্রেণি = "নাম" = "নাম"> <span> <? পিএইচপি / * @ এসকেপ নট যাচাইকৃত * / প্রতিধ্বনি __ ('নাম')?> </span> </label>
            <ডি ক্লাস = "নিয়ন্ত্রণ">
                <ইনপুট নাম = "নাম" আইডি = "নাম" শিরোনাম = "<? পিএইচপি / * @ এসকেপ নট যাচাইকৃত * / প্রতিধ্বনি __ ('নাম')?>" মান = "" শ্রেণি = "ইনপুট-পাঠ্য" টাইপ = "পাঠ্য" ডেটা-বৈধকরণ = "{প্রয়োজনীয়: সত্য}" />
            </ P>
        </ P>
        <ডি ক্লাস = "ফিল্ড ইমেল প্রয়োজন">
            <লেবেল শ্রেণি = "লেবেল" = "ইমেল"> <span> <? পিএইচপি / * @ এসকেপ নট যাচাইকৃত * / প্রতিধ্বনি __ ('ইমেল')?> </span> </label>
            <ডি ক্লাস = "নিয়ন্ত্রণ">
                <ইনপুট নাম = "ইমেল" আইডি = "ইমেল" শিরোনাম = "<? php / * @escapeNot যাচাইকৃত * / প্রতিধ্বনি __ ('ইমেল')?>" মান = "" শ্রেণি = "ইনপুট-পাঠ্য" টাইপ = "ইমেল" ডেটা-বৈধতা = "{প্রয়োজনীয়: সত্য, 'বৈধতা-ইমেল': সত্য}" />
            </ P>
        </ P>
        <? পিএইচপি প্রতিধ্বনি $ block-> getChildHtml ('form.additional.info'); ?>
    </ Fieldset>
    <ডি ক্লাস = "ক্রিয়া-সরঞ্জামদণ্ড">
        <ডি ক্লাস = "প্রাথমিক">
            <ইনপুট টাইপ = "লুকানো" নাম = "লুকানো" আইডি = "লুকানো" মান = "" />
            <বাটন টাইপ = "জমা" শিরোনাম = "<? পিএইচপি / * @ এসকেপ নট যাচাইকৃত * / প্রতিধ্বনি __ ('জমা দিন')?>" শ্রেণি = "ক্রিয়াটি প্রাথমিকভাবে জমা দিন">
                <span> <? php / * @escapeNot যাচাইকৃত * / প্রতিধ্বনি __ ('জমা দিন')?> </span>
            </ বোতাম>
        </ P>
    </ P>
</ ফর্ম>

এখন আপনি নিজের ফর্মটিতে ক্যাপচা দেখতে পারবেন। এখন পর্যবেক্ষক ব্যবহার করে আপনার ক্যাপচাকে বৈধতা দেওয়া দরকার। তাই আমি বৈধতার জন্য পোস্ট কন্ট্রোলার প্রিডস্প্যাচ ইভেন্টটি ব্যবহার করি।

পদক্ষেপ:: Vendor/Module/etc/frontend/events.xml

<? এক্সএমএল সংস্করণ = "1.0"?>
<কনফিগারেশন xMLns: xsi = "http://www.w3.org/2001/XMLSchema-instance" xsi: noNamespaceSchemaLocation = "urn: magento: ফ্রেমওয়ার্ক: ইভেন্ট / ইত্যাদি / ইভেন্ট.এক্সএসডি">
    <ইভেন্টের নাম = "নিয়ন্ত্রক_অ্যাকশন_প্রেডিস্পাচ_আপনারআউট_আইডেক্স_পোস্ট">
        <পর্যবেক্ষকের নাম = "ক্যাপচা_ কাস্টম_ফর্ম" উদাহরণ = "বিক্রেতা \ মডিউল \ পর্যবেক্ষক \ চেককাস্টমফর্মঅবস্বর" />
    </ ঘটনা>
</ কনফিগ>

পদক্ষেপ 7: Vendor/Module/Observer/CheckCustomFormObserver.php

নেমস্পেস ভেন্ডর \ মডিউল \ পর্যবেক্ষক;

ম্যাজেন্টো \ ফ্রেমওয়ার্ক \ ইভেন্ট \ অবজারভার ইন্টারফেস ব্যবহার করুন;
Magento \ ফ্রেমওয়ার্ক \ অ্যাপ্লিকেশন \ অনুরোধ \ DataPersistorInterface ব্যবহার করুন;
ম্যাজেন্টো \ ফ্রেমওয়ার্ক \ অ্যাপ \ অবজেক্টম্যানেজার ব্যবহার করুন;
ম্যাজেন্টো \ ক্যাপচা \ পর্যবেক্ষক \ ক্যাপচাস্ট্রিংআরসোলভার ব্যবহার করুন;

ক্লাস চেক কাস্টমফর্মঅবার্সবার অবজারভার ইন্টারফেস প্রয়োগ করে
{
    / **
     * @var \ Magento \ ক্যাপচা \ সহায়তাকারী \ ডেটা
     * /
    সুরক্ষিত he _ সহায়তা;

    / **
     * @var \ Magento \ ফ্রেমওয়ার্ক \ অ্যাপ \ অ্যাকশনফ্ল্যাগ
     * /
    সুরক্ষিত action _actionFlag;

    / **
     * @var \ Magento \ ফ্রেমওয়ার্ক \ বার্তা \ ম্যানেজারআইনটারফেস
     * /
    সুরক্ষিত $ ম্যাসেজম্যানেজার;

    / **
     * @var \ Magento \ ফ্রেমওয়ার্ক \ অ্যাপ \ প্রতিক্রিয়া \ পুনঃনির্দেশ ইন্টারফেস
     * /
    সুরক্ষিত $ পুনর্নির্দেশ;

    / **
     * @vv ক্যাপচা স্ট্রিংসোলভার
     * /
    সুরক্ষিত $ ক্যাপচাস্ট্রিংআরসলভার;

    / **
     * @var DataPersistorInterface
     * /
    প্রাইভেট P ডেটাপ্রেসিস্টর;

    / **
     * @ পরিম \ ম্যাজেন্টো \ ক্যাপচা \ সহায়ক \ ডেটা $ সহায়ক er
     * @ পরিম \ ম্যাজেন্টো \ ফ্রেমওয়ার্ক \ অ্যাপ \ অ্যাকশনফ্ল্যাগ $ অ্যাকশনফ্ল্যাগ
     * @ পরিম \ ম্যাজেন্টো \ ফ্রেমওয়ার্ক \ বার্তা \ ম্যানেজারআইন্টারফেস $ ম্যাসেজ ম্যানেজার
     * @ পরিম \ ম্যাজেন্টো me ফ্রেমওয়ার্ক \ অ্যাপ \ প্রতিক্রিয়া \ রিডাইরেক্ট ইনটারফেস $ পুনর্নির্দেশ
     * @ পরিমাপ ক্যাপচাস্ট্রিংআরসোলভার $ ক্যাপচাস্ট্রিংআরসোলভার
     * /
    পাবলিক ফাংশন __ কনস্ট্রাক্ট (
        \ ম্যাজেন্টো \ ক্যাপচা \ সহায়তাকারী \ ডেটা $ সহায়তা,
        \ ম্যাজেন্টো \ ফ্রেমওয়ার্ক \ অ্যাপ্লিকেশন \ অ্যাকশনফ্ল্যাগ $ অ্যাকশনফ্লেগ,
        Age ম্যাজেন্টো \ ফ্রেমওয়ার্ক \ বার্তা \ ম্যানেজারআইন্টারফেস $ বার্তা ম্যানেজার,
        \ ম্যাজেন্টো \ ফ্রেমওয়ার্ক \ অ্যাপ \ প্রতিক্রিয়া \ পুনর্নির্দেশঘটন $ পুনর্নির্দেশ,
        ক্যাপচাস্ট্রিংআরসোলভার $ ক্যাপচাস্ট্রিংআরসোলভার
    ) {
        $ এটি -> _ সহায়ক = $ সহায়ক;
        $ এটি -> _ ক্রিয়াফ্ল্যাগ = $ ক্রিয়াফ্ল্যাগ;
        $ this-> ম্যাসেজম্যানেজার = $ ম্যাসেজ ম্যানেজার;
        $ this-> redirect = $ redirect;
        $ এটি-> ক্যাপচাস্ট্রিংআরসোলভার = $ ক্যাপচাস্ট্রিংআরসোলভার;
    }

    / **
     কাস্টম ফর্মে ক্যাপচা পরীক্ষা করুন
     *
     * @ পরিম \ ম্যাজেন্টো \ ফ্রেমওয়ার্ক \ ইভেন্ট \ পর্যবেক্ষক $ পর্যবেক্ষক
     * @ পুনর্বার শূন্য
     * /
    পাবলিক ফাংশন এক্সিকিউট (\ ম্যাজেন্টো \ ফ্রেমওয়ার্ক \ ইভেন্ট \ পর্যবেক্ষক $ পর্যবেক্ষক)
    {
        ; formId = 'কাস্টম_ফর্ম';
        $ ক্যাপচা = $ এটি -> _ সহায়ক-> getCaptcha ($ formId);
        যদি ($ ক্যাপচা-> প্রয়োজনীয় ()) {
            / ** @var \ Magento \ ফ্রেমওয়ার্ক \ অ্যাপ \ ক্রিয়া \ ক্রিয়া $ নিয়ামক * /
            $ কন্ট্রোলার = $ পর্যবেক্ষক-> getControllerAction ();
            যদি (! $ ক্যাপচা-> isCor درست ($ এটি-> ক্যাপচাস্ট্রিংআরসোলভার-> সমাধান ($ নিয়ামক-> getRequest (), $ ফর্মআইডি))) {
                $ এটি-> বার্তা ম্যানেজার-> অ্যাডেরার (__ ('ভুল ক্যাপচা।'));
                $ এটি-> getDataPersistor () -> সেট ($ formId, $ নিয়ামক-> getRequest () -> getPostValue ());
                $ এটি -> _ অ্যাকশনফ্লেগ-> সেট ('', \ ম্যাজেন্টো \ ফ্রেমওয়ার্ক \ অ্যাপ \ ক্রিয়া \ ক্রিয়া :: FLAG_NO_DISPATCH, সত্য);
                $ এটি-> পুনঃনির্দেশ-> পুনর্নির্দেশ ($ কন্ট্রোলার-> getResponse (), 'yourroute / সূচক / সূচক');
            }
        }
    }

    / **
     * ডেটা পার্সিস্টর পান
     *
     * @ পুনর্বার ডেটাপার্সিস্টোরআইন্টারফেস
     * /
    ব্যক্তিগত ফাংশন getDataPersistor ()
    {
        যদি ($ এটি-> ডেটাপার্সিস্টর === নাল) {
            $ এটি-> ডেটাপার্সিস্টর = অবজেক্টম্যানেজার :: getInstance ()
                -> পেতে (DataPersistorInterface :: শ্রেণী);
        }

        ফিরুন - এটি-> ডেটাপার্সিস্টর;
    }
}

খুব বিস্তারিত. আমি সর্বতভাবে চেষ্টা করব।
পল

@ সোহেল রানা কীভাবে এটিকে পণ্য পর্যালোচনা ফর্মটিতে যুক্ত করা যায়
সুপ্রিয়া মিশ্র

@ সুপ্রিয়মিত্রের চেক করা দরকার
সোহেল রানা

1
হাই ক্যাপচা প্রদর্শিত হয় তবে পর্যবেক্ষক কন্ট্রোলার_অ্যাকশন_প্রেডিস্পাচ _ ** আমার মনে হয় এই ক্যাপচা যাচাই হচ্ছে না বলে কাজ করছে না
আব্দুল

1
আমি উপরের ত্রুটিটি সমাধান করেছি তবে আমি কাস্টম আকারে ক্যাপচাটি দেখতে পাচ্ছি না
জাফর পিনজার

1

আপনারা যারা এই কাজ করতে পারেন না তাদের জন্য আপনার যা করতে হবে তা করতে হবে:

আপনি ক্যাপচাটি প্রদর্শন না করার কারণটি হ'ল বেস সেটিংসটি ডিফল্ট ক্যাপচা ব্লকটি ব্যবহার করতে হয় যা _toHtML এ ক্যাপচা প্রয়োজন কিনা তা পরীক্ষা করে দেখায়।

যদি আপনার কাছে ক্যাপচাকে সর্বদা প্রদর্শন করার জন্য সেটিংস থাকে তবে আপনি সম্ভবত এই সমস্যাটি চালিত করেন নি তবে যদি এটি সর্বদা ক্যাপচা প্রদর্শন করা হয় না এবং আপনি সর্বদা ক্যাপচা প্রদর্শন করতে চান না (যেমন অ্যাকাউন্ট তৈরি / লগইন ইত্যাদি) আপনার প্রয়োজনের তুলনায় আপনার কাস্টম ক্যাপচার জন্য "সর্বদা প্রয়োজনীয় হতে হবে" তে যুক্তিটি সেট করুন।

বিক্রেতা / ম্যাজেন্টো / মডিউল-ক্যাপচা / ব্লক / ক্যাপচা / ডিফল্টক্যাপচা.পিএফ-র 69 লাইনে আপনি দেখতে পাবেন:

    /**
 * Renders captcha HTML (if required)
 *
 * @return string
 */
protected function _toHtml()
{

    if ($this->getCaptchaModel()->isRequired()) {
        $this->getCaptchaModel()->generate();
        return parent::_toHtml();
    }
    return '';
}

$this->getCaptchaModel()কলগুলি $this->_captchaData->getCaptcha()যা বিক্রেতার / ম্যাজেন্টো / মডিউল-ক্যাপচা / সহায়ক / ডেটা.এফপি রয়েছে

    /**
 * Get Captcha
 *
 * @param string $formId
 * @return \Magento\Captcha\Model\CaptchaInterface
 */
public function getCaptcha($formId)
{
    if (!array_key_exists($formId, $this->_captcha)) {
        $captchaType = ucfirst($this->getConfig('type'));
        if (!$captchaType) {
            $captchaType = self::DEFAULT_CAPTCHA_TYPE;
        } elseif ($captchaType == 'Default') {
            $captchaType = $captchaType . 'Model';
        }

        $this->_captcha[$formId] = $this->_factory->create($captchaType, $formId);
    }
    return $this->_captcha[$formId];
}

এখানে getCaptcha পদ্ধতি ক্যাপচার রেন্ডার করতে প্রকারের জন্য কনফিগার মানটি পরীক্ষা করে এবং এর সাথে কারখানাটি লোড করে $this->_factory->create()

তবে এই কারখানার ক্লাসে পা রেখে আপনি দেখতে পাবেন

 public function create($captchaType, $formId)
{
    $className = 'Magento\Captcha\Model\\' . ucfirst($captchaType);

    $instance = $this->_objectManager->create($className, ['formId' => $formId]);
    if (!$instance instanceof \Magento\Captcha\Model\CaptchaInterface) {
        throw new \InvalidArgumentException(
            $className . ' does not implement \Magento\Captcha\Model\CaptchaInterface'
        );
    }
    return $instance;
}

এখানে সমস্যাটি হ'ল কারখানাটি কোনও কারখানার মডেলের জন্য ম্যাজেন্টো ক্যাপচা মডিউলে কী দেখবে তা .. তবে

আমাদের সহায়তার চারপাশে মোড়ানোর জন্য এবং আমাদের ফর্ম কীটি যাচাই করার জন্য একটি প্লাগিন তৈরি করতে হবে এবং এটি যদি আমাদের ফর্ম কী ব্যবহার করা হয় তবে আমাদের একটি নতুন কারখানার শ্রেণি তৈরি করা দরকার যা আমাদের মডেলটি লোড করে যা that ম্যাজেন্টো \ ক্যাপচা \ মডেল \ ডিফল্টমোডেল এবং ওভারাইডগুলি প্রসারিত করে isRequired () পদ্ধতি। এরকম দেখতে এমন কিছু:

মধ্যে \ তোমার \ মডিউল \ ইত্যাদি \ 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">

<!--Custom Captcha-->
<type name="\Magento\Captcha\Helper\Data">
    <plugin name="custom-captcha" type="Your\Module\Plugin\Helper\CaptchaData" />
</type>

মধ্যে তোমার \ মডিউল \ প্লাগইন \ সাহায্যকারী \ CaptchaData

<?php

namespace Your\Module\Plugin\Helper;

class CaptchaData
{
protected $_captcha = [];

public function __construct(
    \Your\Module\Model\CaptchaFactory $captchaFactory
) {
    $this->captchaFactory = $captchaFactory;
}

/**
 * @param \Magento\Captcha\Helper\Data $subject
 * @param \Closure $proceed
 * @param $formId
 * @return mixed
 */
public function aroundGetCaptcha(\Magento\Captcha\Helper\Data $subject, \Closure $proceed, $formId)
{
    if ($formId == 'your_form_key') {
        $this->_captcha[$formId] = $this->captchaFactory->create();
        return $this->_captcha[$formId];

    }
    return $proceed($formId);

}

}

মধ্যে \ তোমার \ মডিউল \ মডেল \ CaptchaFactory

<?php
/**
* Captcha model factory
*
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Your\Module\Model;

class CaptchaFactory
{
/**
 * @var \Magento\Framework\ObjectManagerInterface
 */
protected $_objectManager;

/**
 * @param \Magento\Framework\ObjectManagerInterface $objectManager
 */
public function __construct(\Magento\Framework\ObjectManagerInterface $objectManager)
{
    $this->_objectManager = $objectManager;
}

/**
 * Get captcha instance
 *
 * @param string $captchaType
 * @param string $formId
 * @return \Magento\Captcha\Model\CaptchaInterface
 * @throws \InvalidArgumentException
 */
public function create()
{
    $instance = $this->_objectManager->create('Your\Module\Model\Captcha', ['formId' => 'event_subscriber']);
    if (!$instance instanceof \Magento\Captcha\Model\CaptchaInterface) {
        throw new \InvalidArgumentException(
            'Your\Module\Model\Captcha does not implement \Magento\Captcha\Model\CaptchaInterface'
        );
    }
    return $instance;
}
}

এবং অবশেষে আপনার মডেলটিকে ছাড়িয়ে যাওয়ার জন্য আপনার \ আপনার \ মডিউল \ মডেল \ ক্যাপচায় প্রয়োজনীয় পরম প্রয়োজন :

<?php

namespace Your\Module\Model;

class Captcha extends \Magento\Captcha\Model\DefaultModel
{
    public function isRequired($login = null)
    {
        return true;
    }
 }

0

নিউজলেটার গ্রাহক পৃষ্ঠায় আমার ক্যাপচা দরকার সোহান আমাকে আমার জন্য নিউজলেটার পর্যবেক্ষক এবং ক্যাপচা কাজটি নিউজলেটার পৃষ্ঠায় ব্যবহার করা হয়েছিল।

1) অ্যাপ / কোড / ভেন্ডোর্নাম / মডিউলনাম / ইত্যাদি / কনফিগারেশন। এক্সএমএল

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Store:etc/config.xsd">
    <default>
        <customer>
            <captcha>
                <shown_to_logged_in_user>
                    <custom_newsletter>1</custom_newsletter>
                </shown_to_logged_in_user>
                <always_for>
                    <custom_newsletter>1</custom_newsletter>
                </always_for>
            </captcha>
        </customer>
        <captcha translate="label">
            <frontend>
                <areas>
                    <custom_newsletter>
                        <label>Newsletter Form</label>
                    </custom_newsletter>
                </areas>
            </frontend>
        </captcha>
    </default>
</config>

2) যান 'অ্যাডমিন -> স্টোর -> কনফিগারেশন -> গ্রাহক -> গ্রাহক কনফিগারেশন -> ক্যাপচা' এবং কনফিগার করুন। আপনি নতুন ফর্মের মূল্য 'নিউজলেটার ফর্ম' দেখতে পারবেন।

3) থিমের অনুলিপি লেআউট ফাইল (default.xML)

<block class="Magento\Newsletter\Block\Subscribe" name="subscribe form " template="Magento_Newsletter::subscribe.phtml">
                <container name="form.additional.info" label="Form Additional Info">
                    <block class="Magento\Captcha\Block\Captcha" name="captcha" after="-" cacheable="false">
                        <action method="setFormId">
                            <argument name="formId" xsi:type="string">custom_newsletter</argument>
                        </action>
                        <action method="setImgWidth">
                            <argument name="width" xsi:type="string">230</argument>
                        </action>
                        <action method="setImgHeight">
                            <argument name="width" xsi:type="string">50</argument>
                        </action>
                    </block>
                </container>

৪) পর্যবেক্ষক তৈরি করুন -> অ্যাপ্লিকেশন / কোড / ভেন্ডোর্নাম / মডিউলনেম / ইত্যাদি / সম্মুখভাগে ইভেন্ট.এক্সএমএল ফাইল তৈরি করুন

 <?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
    <event name="controller_action_predispatch_newsletter_subscriber_new">
        <observer name="captcha_newletter_form" instance="Vendorname/Modulename/Observer\CheckCustomFormObserver" />
    </event>
</config>

5) পর্যবেক্ষক মডেল তৈরি করুন এবং ক্যাপচা অ্যাপ্লিকেশন / কোড / ভেন্ডোর্নাম / মডিউলনাম / পর্যবেক্ষক / চেককাস্টমফর্মঅবরসার.এফপি চেক করুন

public function execute(\Magento\Framework\Event\Observer $observer)
        {   $formId = 'custom_newsletter';
            $captcha = $this->_helper->getCaptcha($formId);
            if ($captcha->isRequired()) {
                /** @var \Magento\Framework\App\Action\Action $controller */
                $controller = $observer->getControllerAction();
                $params=$controller->getRequest()->getPost();
                $currentpage = $params['currentpage'];


                if (!$captcha->isCorrect($this->captchaStringResolver->resolve($controller->getRequest(), $formId))) {                
                    $this->messageManager->addError(__('Incorrect CAPTCHA.'));
                    $this->getDataPersistor()->set($formId, $controller->getRequest()->getPostValue());
                    $this->_actionFlag->set('', \Magento\Framework\App\Action\Action::FLAG_NO_DISPATCH, true);
                    $this->redirect->redirect($controller->getResponse(), $currentpage);
                }
            }
        }
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.