I've the follow problem with my application.
I make use of ACL, all works fine. I need to setup a Console module for some scraping. I've created te module with controller and route but when I run the command in my console I get an permission error from ACL.
My module.config.php;
return array(
'router' => array(
'routes' => array(
),
),
'controllers' => array(
'invokables' => array(
'Cron\Controller\City' => 'Application\Controller\CityController',
),
),
// Placeholder for console routes
'console' => array(
'router' => array(
'routes' => array(
'cronroute' => array(
'options' => array(
'route' => 'getcities',
'defaults' => array(
'controller' => 'Cron\Controller\City',
'action' => 'get'
),
),
),
),
),
),
);
My controller;
<?php
namespace Cron\Controller;
use Zend\Mvc\Controller\AbstractActionController;
class CityController extends AbstractActionController
{
public function getAction()
{
echo 'Get cities';
}
}
And part of my module.acl.roles.php
<?php
return array(
# Guest
'guest' => array(
# Homepage
'home',
# Console routes
'cronroute/getcities', // tried this one
'getcities', // and this one
),
Than the result in the console by the command;
php public_html/index.php getcities
Fatal error: Uncaught exception 'Zend\Permissions\Acl\Exception\InvalidArgumentException' with message 'Resource 'cronroute' not found' in /home/..../domains/..../vendor/zendframework/zendframework/library/Zend/Permissions/Acl/Acl.php:292
Your ACL resource cronroute/getcities
is wrong because it (normally) would check for route getcities
as child from cronroute
.
So the solution is to get rid of /getcities
behind cronroute in module.acl.roles.php
and everything should be fine.