In this post we will check how to delete Magento2 customer account from frontend by provind link at My Account dashboard.
You can find complete module on Github at Magelearn_CustomerDelete
Create folder inside app/code/Magelearn/CustomerDelete
Add registration.php file in it:
1 2 3 4 5 6 7 | <?php \Magento\Framework\Component\ComponentRegistrar::register( \Magento\Framework\Component\ComponentRegistrar::MODULE, 'Magelearn_CustomerDelete' , __DIR__ ); |
Add composer.json file in it:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | { "name" : "magelearn/module-customer-delete" , "description" : "Delete Magento2 Customer Account by Provind link at My Account Dashboard in Frontend." , "type" : "magento2-module" , "require" : {}, "authors" : [ { "name" : "vijay rami" , "email" : "vijaymrami@gmail.com" } ], "license" : "proprietary" , "minimum-stability" : "dev" , "autoload" : { "files" : [ "registration.php" ], "psr-4" : { "Magelearn\\CustomerDelete\\" : "" } } } |
Add etc/module.xml file in it:
1 2 3 4 5 6 7 8 | <? xml version = "1.0" ?> < config xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation = "urn:magento:framework:Module/etc/module.xsd" > < module name = "Magelearn_CustomerDelete" setup_version = "2.0.0" > < sequence > < module name = "Magento_Customer" /> </ sequence > </ module > </ config > |
For that we will modify layout xml file.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <? xml version = "1.0" ?> < page xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation = "urn:magento:framework:View/Layout/etc/page_configuration.xsd" > < body > < referenceBlock name = "customer_account_navigation" > < block class = "Magento\Framework\View\Element\Html\Link\Current" name = "delete-customer" > < arguments > < argument name = "path" xsi:type = "string" >customerdelete/index/delete</ argument > < argument name = "label" xsi:type = "string" >Delete Account</ argument > < argument name = "sortOrder" xsi:type = "number" >300</ argument > </ arguments > </ block > </ referenceBlock > </ body > </ page > |
1 2 3 4 5 6 7 8 9 | <? xml version = "1.0" ?> xsi:noNamespaceSchemaLocation = "urn:magento:framework:App/etc/routes.xsd" > < router id = "standard" > < route id = "customerdelete" frontName = "customerdelete" > < module name = "Magelearn_CustomerDelete" /> </ route > </ router > </ config > |
Now we will add our layout file for this new page at view/frontend/layout/customerdelete_index_delete.xml
1 2 3 4 5 6 7 8 9 10 11 | <? xml version = "1.0" ?> < page xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation = "urn:magento:framework:View/Layout/etc/page_configuration.xsd" > < update handle = "customer_account" /> < body > < referenceBlock name = "content" > < block class = "Magelearn\CustomerDelete\Block\Customer\Delete" name = "delete-customer-account" template = "customer/delete.phtml" > </ block > </ referenceBlock > < referenceBlock name = "page.main.title" display = "false" /> </ body > </ page > |
And add controller file for this page at Controller/Index/Delete.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | <?php namespace Magelearn\CustomerDelete\Controller\Index; use Magento\Framework\App\Action\Action; use Magento\Framework\App\Action\Context; use Magento\Framework\View\Result\PageFactory; class Delete extends Action { protected $_pageFactory ; public function __construct(Context $context , PageFactory $pageFactory ) { $this ->_pageFactory = $pageFactory ; parent::__construct( $context ); } public function execute() { $page = $this ->_pageFactory->create(); $page ->getConfig()->getTitle()->set( 'Delete Customer' ); return $page ; // TODO: Implement execute() method. } } |
Now as per highlighted in customerdelete_index_delete.xml will add our block and template file.
Add file at Block/Customer/Delete.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | <?php namespace Magelearn\CustomerDelete\Block\Customer; use Magento\Framework\View\Element\Template; use Magento\Framework\View\Element\Template\Context; use Magento\Framework\UrlInterface; class Delete extends Template { public function __construct( UrlInterface $urlBuilder , Context $context , array $data = [] ) { $this ->urlBuilder = $urlBuilder ; parent::__construct( $context , $data ); } /** * Generate url by route and parameters * * @param string $route * @param array $params * @return string */ public function getUrl( $route = '' , $params = []) { return $this ->urlBuilder->getUrl( $route , $params ); } } |
And Template file at view/frontend/templates/customer/delete.phtml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | <main id= "maincontent" class = "page-main" > <p class = "cms-content-important" >Remember before delete customer , all information regarding that customer will delete for permanent and it will not recover any how.</p> </main> <button type= "button" class = "action primary open-customer-delete-form" > <span data-bind= "i18n: 'Delete Customer'" ></span> </button> <div class = "content" id= "popup-modal" > <div class = "customer-delete-form-popup" style= "display: none;" > <form id= "customer-delete-form" action= "<?php echo $block->getUrl()?>customerdelete/index/remove" method= "post" > <button class = "action submit primary" type= "submit" name= "actiondelete" value= "1" >Yes</button> <button class = "action-no primary" type= "button" name= "actionclose" value= "0" >No</button> </form> </div> </div> <script> require ( [ 'jquery' , 'Magento_Ui/js/modal/modal' ], function ($, modal) { jQuery(document).ready( function (){ var options = { type: 'popup' , responsive: true, innerScroll: true, title: 'Are you sure you want to delete?' , buttons: [{ text: $.mage.__( 'Close' ), class : '' , click: function () { this.closeModal(); } }] }; var openModal = modal(options, $( '#popup-modal' )); jQuery( 'body' ).on( 'click' , '.open-customer-delete-form' , function (){ jQuery( '.customer-delete-form-popup' ).show(); jQuery( '#popup-modal' ).modal( 'openModal' ); }); jQuery( 'body' ).on( 'click' , '#customer-delete-form .action-no' , function (e){ jQuery( '#popup-modal' ).modal( 'closeModal' ); }); }); } ); </script> |
Now as per above file the action URL given in the form, we will create our controller for that.
Add file at Controller/Index/Remove.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 | <?php namespace Magelearn\CustomerDelete\Controller\Index; use Magento\Framework\App\Action\Action; use Magento\Framework\App\Action\Context; use Magento\Framework\View\Result\PageFactory; use Magento\Customer\Model\SessionFactory; use Magento\Customer\Api\CustomerRepositoryInterface; use Magento\Framework\Message\ManagerInterface; use Magento\Framework\Registry; /** * Class Remove * @package Magelearn\CustomerDelete\Controller\Index */ class Remove extends Action { /** * @var PageFactory */ protected $_pageFactory ; /** * @var SessionFactory */ protected $_sessionFactory ; /** * @var ManagerInterface */ protected $_messageManager ; /** * @var CustomerFactory */ protected $_customerFactory ; protected $_registry ; /** * Remove constructor. * @param Context $context * @param SessionFactory $sessionFactory * @param PageFactory $pageFactory * @param ManagerInterface $messageManager * @param CustomerRepositoryInterface $customerRepository */ public function __construct( Context $context , SessionFactory $sessionFactory , PageFactory $pageFactory , ManagerInterface $messageManager , CustomerRepositoryInterface $customerRepository , Registry $registry ) { $this ->_sessionFactory = $sessionFactory ; $this ->_pageFactory = $pageFactory ; $this ->_messageManager = $messageManager ; $this ->_customerRepository = $customerRepository ; $this ->_registry = $registry ; parent::__construct( $context ); } /** * @return \Magento\Framework\App\ResponseInterface|\Magento\Framework\Controller\ResultInterface|\Magento\Framework\View\Result\Page * @throws \Exception */ public function execute() { $customer = $this ->_sessionFactory->create(); if ( $customer ->isLoggedIn()) { $this ->_registry->register( 'isSecureArea' , true); $customerId = $customer ->getId(); if (! empty ( $customerId )) { try { $this ->_customerRepository->deleteById( $customerId ); $this ->_messageManager->addSuccessMessage(__( 'Customer has been deleted.' )); } catch (\Exception $exception ) { $this ->_messageManager->addErrorMessage( $exception ->getMessage()); } } } $resultRedirect = $this ->resultRedirectFactory->create(); $resultRedirect ->setPath( 'customer/account/login' ); return $resultRedirect ; } } |
0 Comments On "Delete Magento2 Customer Account From Frontend by Provind link at My Account Dashboard"