Magento2 - কমান্ড-লাইন - ব্লক টেমপ্লেটগুলি ব্যবহার করে ইমেল পাঠানো - ত্রুটি: প্রয়োজনীয় যুক্তি Miss ডিবাগহিন্টসপথ অনুপস্থিত


11

কমান্ড-লাইন থেকে ম্যাজেন্টো 2-তে ইমেলগুলি প্রেরণের চেষ্টা করার সময়, আমি নীচের ব্যতিক্রমটির মুখোমুখি হয়েছি। কোনও ফ্রন্টএন্ড বা ব্যাকএন্ড কন্ট্রোলার থেকে ইমেল প্রেরণের জন্য খুব একই শ্রেণিটি ব্যবহার করার সময় পুরোপুরি কাজ করছিল। কমান্ড লাইন ইন্টারফেসটি ব্যবহার করে সমস্যাটি কঠোরভাবে ঘটছিল।

ব্যতিক্রম:

মূল.ক্রিটিকাল: ব্যতিক্রম 'বাজেমেথডক্যাল এক্সপ্লেশন' বার্তা সহ 'প্রয়োজনীয় যুক্তি ing ডিবাগহিন্টস পেজ অফ ম্যাজেন্টো \ বিকাশকারী \ মডেল \ টেমপ্লেজিন \ প্লাগিন \ ডিবাগহিন্টস' ইন /........ / এমমেন্টো / ওয়েভেন্ডর / মাইজেন্টো / ফ্রেমওয়ার্ক / অবজেক্ট ম্যানেজার / ফ্যাক্টরি / ডায়নামিক / ডেভেলপার.এফপি 45

টেমপ্লেটের অভ্যন্তর থেকে বিন্যাসের মাধ্যমে কোনও ব্লক কল করার চেষ্টা করার সময়ও সমস্যাটি ঘটেছিল। অবরুদ্ধ কলটি সরিয়ে ফেলার সাথে সাথেই ব্যতিক্রমটি প্রদর্শিত হবে না।

টেমপ্লেট ফাইল:

অ্যাপ্লিকেশন / কোড / নামস্থান / মডিউল / দৃশ্য / ফ্রন্টএন্ড / ইমেইল / email_notification.html

{{template config_path="design/email/header_template"}}

...

<!-- THIS LINE CAUSED THE EXCEPTION TO SHOW UP -->
{{layout handle="sales_email_order_items" order=$order area="frontend"}}

...

{{template config_path="design/email/footer_template"}}

ইমেলটি এখনও সাবজেক্ট লাইনটি অক্ষত রেখে পাঠানো হয়েছিল তবে পুরো সামগ্রীটি রেন্ডার করা হয়নি এবং ইমেলটি প্রাপ্ত হওয়ার পরে কেবল নীচের ত্রুটিটি বিষয়বস্তু বিভাগে প্রদর্শিত হয়েছিল।

ইমেলের ভিতরে মুদ্রিত ত্রুটি:

টেমপ্লেট ফিল্টার করার সময় ত্রুটি: প্রয়োজনীয় আর্গুমেন্ট Miss ডিবাগহিন্টস পেজ ম্যাজেন্টো \ বিকাশকারী \ মডেল \ টেমপ্লেইজাইন \ প্লাগইন ug ডিবাগহিন্টস।

উত্তর:


16

অবশেষে আমি ম্যাজেন্টো কমিউনিটি ফোরামে এই সমস্যার সমাধান খুঁজে পেয়েছি, যা @ ডুনাগান ৫৮৮7 সরবরাহ করেছিল । আমি এটি এখানে magento.stackexchange.com এ ভাগ করে নেওয়ার সিদ্ধান্ত নিয়েছি কারণ অনেকেই এই ব্যতিক্রমটির একটি ভাল রেফার্ড সমাধান থেকে উপকৃত হতে পারে।

মূল সম্প্রদায় ফোরাম পোস্টের একটি লিঙ্ক আছে: ব্লক সহ ইমেল টেমপ্লেট

মনে হচ্ছে এই সমাধানটি @ dunagan5887 দ্বারা উদ্ধৃত হয়েছে ;dictates that the di.xml directive set in vendor/magento/module-developer/etc/adminhtml/di.xml is loaded.

সমাধানটি এই সহজ কোডের লাইন নিয়ে গঠিত:

এই $ ->: _ objectManager-> কনফিগার ($ এই ->: _ configLoader-> লোড ( 'adminhtml'));


দয়া করে নীচে একটি কার্যকরী সংস্করণ কমান্ড লাইন বর্গটি আবিষ্কার করুন:

অ্যাপ্লিকেশন / কোড / নামস্থান / মডিউল / কনসোল / Command.php

<?php
namespace NameSpace\Module\Console\Command;

use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputArgument;
use Magento\Framework\Exception\LocalizedException;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;

class CustomCommandClass extends Command
{
    public function __construct(
        \Magento\Framework\App\State $state,
        \Magento\Framework\ObjectManagerInterface $objectManager,
        \Magento\Framework\ObjectManager\ConfigLoaderInterface $configLoader
    ) {
        $state->setAreaCode('frontend'); //SET CURRENT AREA
        $objectManager->configure($configLoader->load('frontend')); //SOLUTION
        parent::__construct();
    }

    ...

}

কেবলমাত্র থেকে এলাকায় পরিবর্তন frontendকরতে adminবা globalআপনার আবেদন প্রয়োজনীয় হিসাবে।


[হালনাগাদ]

adminhtmlস্থিতিশীল বিষয়বস্তু ত্রুটি মোতায়েনের ক্ষেত্রের ক্ষেত্র

দেখে মনে হচ্ছে কিছু কারণে adminhtmlস্থিতিস্থ বিষয়বস্তু মোতায়েন করার সময় অঞ্চল নির্ধারণের ফলে কিছু ত্রুটি ঘটছে।

আমরা নিম্নলিখিতগুলির মতো ত্রুটিগুলি দেখছিলাম:

Fatal error: Uncaught Exception: Warning: Error while sending QUERY packet. PID=22912 in ../magento/vendor/magento/zendframework1/library/Zend/Db/Statement/Pdo.php on line 228 in ../magento/vendor/magento/framework/App/ErrorHandler.php:61

আমি প্রাথমিকভাবে ভেবেছিলাম যে এই ত্রুটিটি max_allowed_packetএমওয়াইএসকিউএলটির জন্য একটি নিম্ন সেটিংয়ের কারণে ঘটবে তবে সীমা ইতিমধ্যে যথেষ্ট ছিল এবং এটি উত্থাপনের বিষয়টি সমাধান করা হয়নি, তাই আমি আরও খনন করার সিদ্ধান্ত নিয়েছি। একটি নির্মূলকরণ প্রক্রিয়াটি চালিয়ে যাওয়ার পরে অবশেষে আমি জানতে পারলাম যে অনুরূপ কমান্ড ফাংশন ব্যবহার করে দুটি মডিউলের মধ্যে এটিই প্রধান পার্থক্য, যা থেকে মডিউলগুলির মধ্যে একটি সক্রিয় হওয়ার সাথে সাথেই এই সমস্যাটি সৃষ্টি করছে।

যদিও আমি এই সমস্যা বা বিরোধের উত্স খুঁজে পেতে খনন করি নি, আমি ভেবেছিলাম যে এখানে আমার অনুসন্ধানগুলি ভাগ করে নেওয়া ভাল ধারণা হবে যেহেতু অন্যরা এটি কার্যকর হতে পারে।


[আপডেট - 2]

সঠিক পদ্ধতি:

ম্যাজেন্টোকে ২.২. এক্স এ উন্নীত করার পরে আমরা বুঝতে পেরেছি যে অঞ্চল নির্ধারণের জন্য এটি সঠিক পদ্ধতি:

অ্যাপ্লিকেশন / কোড / নামস্থান / মডিউল / কনসোল / Command.php

<?php
namespace NameSpace\Module\Console\Command;

use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputArgument;
use Magento\Framework\Exception\LocalizedException;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;

class CustomCommandClass extends Command
{
    public function __construct(
        \Magento\Framework\App\State $state,
    ) {
        $this->_appState = $appState;
        parent::__construct();
    }

    ...

    protected function execute(InputInterface $input, OutputInterface $output)
    {
        $this->_appState->setAreaCode(\Magento\Framework\App\Area::AREA_GLOBAL); //SET CURRENT AREA

        ...

    }

    ...

}

নোট করুন যে আমরা অবজেক্ট ম্যানেজারটি ব্যবহার করি না এবং অঞ্চলটি ফাংশনের মধ্যে এটির প্রয়োজন হয় এবং কনস্ট্রাক্টরের মধ্যে নয়। এটি অঞ্চল নির্ধারণের আনুষ্ঠানিক উপায় এবং এটি সমস্ত ম্যাজেন্টো 2 সংস্করণে নির্বিঘ্নে কাজ করা উচিত।


উপলব্ধ ক্ষেত্রগুলির একটি তালিকা নিম্নলিখিত শ্রেণিতে পাওয়া যায়:

Magento \ ফ্রেমওয়ার্ক \ অ্যাপ \ ফোন

class Area implements \Magento\Framework\App\AreaInterface
{
    const AREA_GLOBAL = 'global';
    const AREA_FRONTEND = 'frontend';
    const AREA_ADMIN    = 'admin';
    const AREA_ADMINHTML = 'adminhtml';
    const AREA_DOC = 'doc';
    const AREA_CRONTAB = 'crontab';
    const AREA_WEBAPI_REST = 'webapi_rest';
    const AREA_WEBAPI_SOAP = 'webapi_soap';

    ...

অনেক ধন্যবাদ এলজিটিটো। তুমি আমার দিন বাঁচাও :) আবার একটি লগ ধন্যবাদ
অঙ্কিত শাহ

আমি আমার জন্য বিশ্বব্যাপী এবং এটির কাজ সূক্ষ্ম হিসাবে সুযোগ রেখেছি।
রাকেশ জেসাদিয়া

1
সতর্কতা: $objectManager->configure($configLoader->load('frontend'));কোনও শ্রেণি তৈরির ক্ষেত্রে সেই কোডটি ( ) ব্যবহার করবেন না ! আপনি যদি করেন এবং আপনার বর্তমান অঞ্চলটির চেয়ে আলাদা অঞ্চল থেকে কনফিগারেশন লোড করেন, এটি ম্যাজেন্টো 2 কে মারাত্মকভাবে ভেঙে দিতে পারে!
ওয়েসলি ভেস্টজেন্স

@ ওয়েসলি ভেস্টজেন্স +1 আপনার মন্তব্যের জন্য আপনাকে ধন্যবাদ। সঠিক পদ্ধতিটি আসলে খুব আলাদা এবং এটি প্রতিফলিত করার জন্য আমি আমার উত্তর আপডেট করেছি। দয়া করে [আপডেট - 2] দেখুন
এলগাতিটো

আসলে, আপনি যদি ম্যাজেন্টো 2 এর ভিউ স্তরের কোনও অংশ ব্যবহার করেন (যা ম্যাজেন্টো 2 তে পিডিএফ ফাইল তৈরি করার জন্য প্রয়োজনীয়) কেবলমাত্র অঞ্চলটি সেট করা কাজ করে না। আপনি নিম্নলিখিত বিষয়বস্তু সম্পর্কিত একটি ত্রুটি পাবেন: Magento\Developer\Model\TemplateEngine\Plugin\DebugHintsকারণ debugHintsPathভেরিয়েবল সেট করা নেই। আপনার অ্যাডমিনএইচটিএমএল অঞ্চল ডিআই কনফিগারেশন কাজ করে বা ম্যানুয়ালি debugHintsPathভেরিয়েবল কাজ নির্ধারণ করতে আপনার মূল কোড ব্যবহার করে, তবে অন্যান্য ভাঙ্গা অংশ থাকতে পারে। এটি ম্যাজেন্টোতে আসলে একটি "বাগ", কারণ সিএলআই-এ দেখা স্তর উপাদান ব্যবহার করা সম্ভব নয়।
ওয়েসলে ভেস্টজেন্স

6

ম্যাজেন্টোতে সিএলআই-এর যথাযথ অঞ্চল না থাকায় আমি নীচের কাজগুলি অনুধাবন করেছি:

অ্যাপ্লিকেশন / কোড / নামস্থান / মডিউল, / 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">
    <!-- Add this for sending email via cli -->
    <type name="Magento\Developer\Model\TemplateEngine\Plugin\DebugHints">
        <arguments>
            <argument name="debugHintsPath" xsi:type="string">dev/debug/template_hints_storefront</argument>
        </arguments>
    </type>
</config>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.