link-in - רשומות קוד

חפש את הקוד שלך >

Events and observers

Events

טריגרים של פעולות לרוב , פעולה של משתמש באתר 

observers

פעולות מערכת , יותר רלוונטים ללוגיקה 

דרך פעולה:

שלב א: מציאת הEVENT שעליו אני רוצה להתלבש , לרוב נעשה על ידי חיפוש בגוגול .לדוגמה : לאחר הוספה של מוצר לסל
<?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="checkout_cart_product_add_after">
        <observer name="customprice" instance="Webkul\Hello\Observer\CustomPrice" />
    </event>
</config>

בגוגל מצאתי את הרישמה המלא של הטריגרים :

  • checkout_cart_add_product_complete
  • checkout_cart_update_item_complete
  • checkout_cart_product_add_after
  • checkout_cart_update_items_before
  • checkout_cart_update_items_after
  • checkout_cart_save_before
  • checkout_cart_save_after
  • checkout_cart_product_update_after

שלב ב : חיפוש שם הטריגר בקבצי המערכת על מנת להבין איזה אובייקטים ממומשים פה , לא להתבסס על UNIT-TEST

שלב ג: בניית קובץ לוגיקה בתוך תיקיית Observer

VENDOR/MODULE/Observer/CustomerLogin.php

<?php
namespace LessonBackend\EventsAndObservers\Observer;

use Magento\Framework\Event\ObserverInterface;
require_once('lib/internal/kint/kint.phar');
class CustomerLogin implements ObserverInterface
{

    /**
     * @var \Psr\Log\LoggerInterface
     */
    protected $logger;

    public function __construct(\Psr\Log\LoggerInterface $logger)
    {
        $this->logger = $logger;
    }

    public function execute(\Magento\Framework\Event\Observer $observer)
    {
        $customer = $observer->getEvent()->getCustomer();
        d($observer->getEvent());
//        print_r(get_class_methods($customer));
        exit;

        $customerEmail = $customer->getEmail();

//        $eventManager->dispatch(
//            'EVENT_NAME',
//            ['model' => $customer, 'password' => 'some_password']
//        );

        $this->logger->error('Customer Logged In, Customer Email: '.$customerEmail);

        return $this;
    }
}

שלב ד: בניית קובץ DI.XML 

VANDOR/MODULE/etc/events.xml

במידה ומדובר בטריגר שמתרחש בפרונט אז זה הולך לתקיית frontend

<?xml version="1.0" encoding="UTF-8"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
    <event name="controller_action_predispatch">
        <observer name="global_example" instance="LessonBackend\EventsAndObservers\Observer\Example" />
    </event>
</config>
event name - שם הטריגר
observer name - שן יחודי שלנו