0

I've not found something that could help me in other topis :(

My problem is correlated to creation of pages, when I try to create a new Page in Content->Pages->New Page i receive this error :

Notice: Undefined index: frontName in /var/www/html/magento/vendor/magento/framework/App/Route/Config.php on line 123

Next there's the code of App/Route/Config.php if it could be helpful :

<?php
/**
 * Routes configuration model
 *
 * Copyright © Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */
namespace Magento\Framework\App\Route;

use Magento\Framework\Serialize\SerializerInterface;

class Config implements ConfigInterface
{
    /**
     * @var \Magento\Framework\App\Route\Config\Reader
     */
    protected $_reader;

    /**
     * @var \Magento\Framework\Cache\FrontendInterface
     */
    protected $_cache;

    /**
     * @var string
     */
    protected $_cacheId;

    /**
     * @var \Magento\Framework\Config\ScopeInterface
     */
    protected $_configScope;

    /**
     * @var \Magento\Framework\App\AreaList
     */
    protected $_areaList;

    /**
     * @var array
     */
    protected $_routes;

    /**
     * @var SerializerInterface
     */
    private $serializer;

    /**
     * @param Config\Reader $reader
     * @param \Magento\Framework\Config\CacheInterface $cache
     * @param \Magento\Framework\Config\ScopeInterface $configScope
     * @param \Magento\Framework\App\AreaList $areaList
     * @param string $cacheId
     */
    public function __construct(
        Config\Reader $reader,
        \Magento\Framework\Config\CacheInterface $cache,
        \Magento\Framework\Config\ScopeInterface $configScope,
        \Magento\Framework\App\AreaList $areaList,
        $cacheId = 'RoutesConfig'
    ) {
        $this->_reader = $reader;
        $this->_cache = $cache;
        $this->_cacheId = $cacheId;
        $this->_configScope = $configScope;
        $this->_areaList = $areaList;
    }

    /**
     * Fetch routes from configs by area code and router id
     *
     * @param string $scope
     * @return array
     */
    protected function _getRoutes($scope = null)
    {
        $scope = $scope ?: $this->_configScope->getCurrentScope();
        if (isset($this->_routes[$scope])) {
            return $this->_routes[$scope];
        }
        $cacheId = $scope . '::' . $this->_cacheId;
        $cachedRoutes = $this->_cache->load($cacheId);
        if ($cachedRoutes) {
            $cachedRoutes = $this->getSerializer()->unserialize($cachedRoutes);
            if (is_array($cachedRoutes)) {
                $this->_routes[$scope] = $cachedRoutes;
                return $cachedRoutes;
            }
        }

        $routers = $this->_reader->read($scope);
        $routes = $routers[$this->_areaList->getDefaultRouter($scope)]['routes'] ?? null;
        $routesData = $this->getSerializer()->serialize($routes);
        $this->_cache->save($routesData, $cacheId);
        $this->_routes[$scope] = $routes;
        return $routes;
    }

    /**
     * Retrieve route front name
     *
     * @param string $routeId
     * @param null|string $scope
     * @return string
     */
    public function getRouteFrontName($routeId, $scope = null)
    {
        $routes = $this->_getRoutes($scope);
        return isset($routes[$routeId]) ? $routes[$routeId]['frontName'] : $routeId;
    }

    /**
     * @inheritdoc
     *
     * @param string $frontName
     * @param string $scope
     * @return bool|int|string
     */
    public function getRouteByFrontName($frontName, $scope = null)
    {
        foreach ($this->_getRoutes($scope) as $routeId => $routeData) {
            if ($routeData['frontName'] == $frontName) {
                return $routeId;
            }
        }

        return false;
    }

    /**
     * @inheritdoc
     *
     * @param string $frontName
     * @param string $scope
     * @return string[]
     */
    public function getModulesByFrontName($frontName, $scope = null)
    {
        $routes = $this->_getRoutes($scope);
        $modules = [];
        foreach ($routes as $routeData) {
            if ($routeData['frontName'] == $frontName && isset($routeData['modules'])) {
                $modules = $routeData['modules'];
                break;
            }
        }

        return array_unique($modules);
    }

    /**
     * Get serializer
     *
     * @return \Magento\Framework\Serialize\SerializerInterface
     * @deprecated 101.0.0
     */
    private function getSerializer()
    {
        if ($this->serializer === null) {
            $this->serializer = \Magento\Framework\App\ObjectManager::getInstance()
                ->get(SerializerInterface::class);
        }
        return $this->serializer;
    }
}

Someone could help me? thank you in advice guys

0

the "frontName" property is most likely missing in the routes.xml file of one of your custom modules.

Here is how it should look:

<?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="standard">
        <route id="myroute" frontName="myroute">
            <module name="Vendor_Module"/>
        </route>
    </router>
</config>

Edit

For a fast debugging, I would change the Config.php file in line 123:

/**
     * @param string $frontName
     * @param string $scope
     * @return bool|int|string
     */
    public function getRouteByFrontName($frontName, $scope = null)
    {
        foreach ($this->_getRoutes($scope) as $routeId => $routeData) {
// this is new
if(!isset($routeData['frontName'])) {
var_dump($routeId);
var_dump($routeData);
die;
}
            if ($routeData['frontName'] == $frontName) {
                return $routeId;
            }
        }

        return false;
    }

This should give you enough information to search your code and find the error's root cause.

Note that, although the error is thrown in the core, the root cause is most likely a wrong configuration in another file which is read during that process.

4
  • Hi Simon, it's more a problem of not a custom module but with a fraemwork of Magento, i really don't know in what route.xml i can place this since it's more like a system problem... any suppose? And thank u for the help in any case! – Emanuele Cozzolino Nov 5 '20 at 10:51
  • updated my answer. – simonthesorcerer Nov 5 '20 at 10:59
  • Good Simon, with the log error i've found that the problem was in a new module imported into magento. The "fix" is return back to a commit without that module. Thank u a lot! – Emanuele Cozzolino Nov 5 '20 at 19:25
  • You’re welcome. – simonthesorcerer Nov 5 '20 at 19:36

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.