Skip to content
intermediate Phase 51 · Admin Basics

Admin Routes

Admin route registration, front names, admin URL generation, and route configuration

45m
0 problems
Topic Progress 0%

Admin Route Registration

routes.xml for Admin Area

<!-- app/code/Vendor/Module/etc/adminhtml/routes.xml -->
<?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 id="vendor_module" frontName="vendor_module">
            <module name="Vendor_Module" before="Magento_Backend"/>
        </route>
    </router>
</config>

Front Name Structure

// URL structure: /admin/vendor_module/controller/action
// Example: /admin/vendor_module/order/view

// Front name: vendor_module
// Controller: order
// Action: view

// Full URL: https://magento.com/admin/vendor_module/order/view/id/123

Admin URL Generation

URL Builder

namespace Vendor\Module\Url;

class AdminUrlBuilder
{
    public function __construct(
        private \Magento\Backend\Model\UrlInterface $backendUrlBuilder
    ) {}

    public function getAdminUrl(string $route, array $params = []): string
    {
        return $this->backendUrlBuilder->getUrl($route, $params);
    }
}

// Usage
$url = $this->adminUrlBuilder->getUrl('vendor_module/order/view', ['id' => 123]);
// Returns: http://magento.com/admin/vendor_module/order/view/id/123/

URL in Controllers

namespace Vendor\Module\Controller\Adminhtml\Order;

class View extends \Magento\Backend\App\Action
{
    public function execute()
    {
        $orderId = $this->getRequest()->getParam('id');

        // Generate URL for redirect
        $url = $this->_url->getUrl('vendor_module/order/index');

        return $this->_redirect('vendor_module/order/view', ['id' => $orderId]);
    }
}

Route Security

Admin Route Security

// Check if request is from admin area
if ($this->_backendSession->isLoggedIn()) {
    // User is logged into admin
}

// Validate admin session
$session = $this->authSession;
if (!$session->isLoggedIn()) {
    return $this->_redirect('adminhtml/account/login');
}

ACL Check in Route

// ACL configuration in etc/acl.xml
<config>
    <acl>
        <resources>
            <resource id="Magento_Backend::admin">
                <resource id="Magento_Backend::stores">
                    <resource id="Magento_Backend::stores_settings">
                        <resource id="Magento_Config::config"/>
                    </resource>
                </resource>
                <resource id="Magento_Sales::sales">
                    <resource id="Magento_Sales::orders"/>
                </resource>
            </resource>
        </resources>
    </acl>
</config>

Route Middleware

// Custom route middleware
namespace Vendor\Module\Controller\Adminhtml\Plugin;

class RoutePlugin
{
    public function beforeExecute(
        \Magento\Backend\App\Action $action
    ): void {
        // Pre-execution checks
        if (!$this->isAllowed($action)) {
            throw new \Magento\Framework\Exception\AuthorizationException(
                __('Access denied.')
            );
        }
    }
}

Admin URL Configuration

Admin URL Settings

<!-- app/code/Vendor/Module/etc/config.xml -->
<config>
    <default>
        <web>
            <default>
                <frontName>admin</frontName>
            </default>
        </web>
    </default>
</config>

Custom Admin Front Name

// Change admin URL for security
// bin/magento setup:config:set --backend-frontname="myadmin"

// Or in env.php:
return [
    'backend' => [
        'frontName' => 'myadmin',
    ],
];

URL Rewrite for Admin

// Custom URL rewrite for admin routes
namespace Vendor\Module\Rewrite;

class AdminUrlRewrite
{
    public function __construct(
        private \Magento\UrlRewrite\Model\UrlRewriteInterface $urlRewrite
    ) {}

    public function rewrite(string $url): string
    {
        $rewrite = $this->urlRewrite->rewrite(
            new \Magento\Framework\DataObject(['request_url' => $url])
        );

        return $rewrite->getTargetUrl();
    }
}

Quiz

1. What is a front name in admin routes?

Question 1 options

2. How do you generate admin URLs programmatically?

Question 2 options

3. What must admin routes have for security?

Question 3 options

Flashcards

Question

Admin route front name?

Answer

URL segment identifying the module (e.g., vendor_module)

Question

How to generate admin URL?

Answer

$backendUrl->getUrl('vendor_module/controller/action', $params)

Question

Admin URL structure?

Answer

/admin/frontname/controller/action/id/123

Question

Security requirements?

Answer

ACL configuration + admin session validation

Revision Notes

Key Takeaways

  • 1. Admin routes are defined in etc/adminhtml/routes.xml
  • 2. Front names identify modules in the URL structure
  • 3. Backend URL builder generates admin URLs with security keys
  • 4. ACL configuration controls access to admin resources
  • 5. Session validation ensures users are authenticated

Interview Tips

  • Explain the admin URL structure and front name purpose
  • Describe how to secure admin routes with ACL
  • Discuss admin URL generation best practices

Cheat Sheet

Admin Routes:
  routes.xml → router id="admin"
  frontName → URL segment
  URL: /admin/frontname/controller/action

Security:
  ACL: etc/acl.xml → resource tree
  Session: isLoggedIn() check
  Front name: customize for security

URL Generation:
  $backendUrl->getUrl($route, $params)
  $this->_redirect($route, $params)