enter image description herei'm trying to add a new module named as Album
in Zend Skeleton application but however while accessing it through URL it throws an error below.i have spent almost 5 hours but did not find any solution.Any help will be appreciated.
File:/var/www/zf2-tutorial/vendor/zendframework/zend-servicemanager/src/Factory/InvokableFactory.php:30
Message:Class Album/Controller/AlbumController not found.
stack trace #0 /var/www/zf2-tutorial/vendor/zendframework/zend- servicemanager/src/ServiceManager.php(758): Zend\ServiceManager\Factory\InvokableFactory- __invoke(Object(Zend\ServiceManager\ServiceManager), 'Album\Controlle...', NULL) #1 /var/www/zf2-tutorial/vendor/zendframework/zend- servicemanager/src/ServiceManager.php(200): Zend\ServiceManager\ServiceManager->doCreate('Album\Controlle...') #2 /var/www/zf2-tutorial/vendor/zendframework/zend- servicemanager/src/AbstractPluginManager.php(141): Zend\ServiceManager\ServiceManager->get('Album\Controlle...') #3 /var/www/zf2-tutorial/vendor/zendframework/zend-
mvc/src/DispatchListener.php(95): Zend\ServiceManager\AbstractPluginManager->get('Album\Controlle...') #4 /var/www/zf2-tutorial/vendor/zendframework/zend- eventmanager/src/EventManager.php(322): Zend\Mvc\DispatchListener- onDispatch(Object(Zend\Mvc\MvcEvent)) #5 /var/www/zf2-tutorial/vendor/zendframework/zend- eventmanager/src/EventManager.php(179): Zend\EventManager\EventManager- triggerListeners(Object(Zend\Mvc\MvcEvent), Object(Closure)) #6 /var/www/zf2-tutorial/vendor/zendframework/zend- mvc/src/Application.php(332): Zend\EventManager\EventManager- triggerEventUntil(Object(Closure), Object(Zend\Mvc\MvcEvent)) #7 /var/www/zf2-tutorial/public/index.php(48): Zend\Mvc\Application- run() #8 {main}
**module.config.php**
<?php
namespace Album;
return array(
'controllers' => array(
'invokables' => array(
'Album\Controller\Album' => Controller\AlbumController::class
),
),
'router' => array(
'routes' => array(
'album' => array(
'type' => 'segment',
'options' => array(
'route' => '/album[/:action][/:id]',
'defaults' => array(
'controller' => Controller\Album::class,
'action' => 'index',
),
'constraints' => array(
'controller' => '[a-zA-Z][a-zA-Z0-9_-]*',
'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
'id' => '[0-9]+',
),
),
),
),
),
'view_manager' => array(
'template_path_stack' => array(
'album' => __DIR__ . '/../view',
),
),
);
?>
**AlbumController.php**
<?php
namespace Album;
use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;
class AlbumController extends AbstractActionController
{
protected $albumTable;
public function getAlbumTable()
{
if (! $this->albumTable) {
$sm = $this->getServiceLocator();
$this->albumTable = $sm->get('Album\Model\AlbumTable');
}
return $this->albumTable;
}
public function indexAction()
{
return new ViewModel(array(
'albums' => '',
));
}
public function addAction()
{
}
public function editAction()
{
}
public function deleteAction()
{
}
}
**Album.php**
<?php
namespace Album\Model;
class Album
{
public $id;
public $artist;
public $title;
public function exchangeArray($data)
{
$this->id = (! empty($data['id'])) ? $data['id'] : null;
$this->artist = (! empty($data['artist'])) ? $data['artist'] :
null;
$this->title = (! empty($data['title'])) ? $data['title'] : null;
}
}
**AlbumTable.php**
<?php
use Zend\Db\TableGateway\TableGateway;
class AlbumTable
{
protected $tableGateway;
public function __construct(TableGateway $tableGateway)
{
$this->tableGateway = $tableGateway;
}
public function fetchAll()
{
$resultSet = $this->tableGateway->select();
return $resultSet;
}
public function getAlbum($id)
{
$id = (int) $id;
$rowset = $this->tableGateway->select(array(
'id' => $id
));
$row = $rowset->current();
if (! $row) {
throw new \Exception("Could not find row $id");
}
return $row;
}
public function saveAlbum(Album $album)
{
$data = array(
'artist' => $album->artist,
'title' => $album->title
);
$id = (int) $album->id;
if ($id == 0) {
$this->tableGateway->insert($data);
} else {
if ($this->getAlbum($id)) {
$this->tableGateway->update($data, array(
'id' => $id
));
} else {
throw new \Exception('Album id does not exist');
}
}
}
public function deleteAlbum($id)
{
$this->tableGateway->delete(array(
'id' => (int) $id
));
}
}
**Module.php**
<?php
namespace Album;
use Zend\ModuleManager\Feature\AutoloaderProviderInterface;
use Zend\ModuleManager\Feature\ConfigProviderInterface;
u se Album\Model\Album;
use Album\Model\AlbumTable;
use Zend\Db\ResultSet\ResultSet;
use Zend\Db\TableGateway\TableGateway;
class Module implements AutoloaderProviderInterface,
ConfigProviderInterface
{
public function getAutoloaderConfig()
{
return array(
'Zend\Loader\ClassMapAutoloader' => array(
__DIR__ . '/autoload_classmap.php'
),
'Zend\Loader\StandardAutoloader' => array(
'namespaces' => array(
__NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__
)
)
);
}
public function getConfig()
{
return include __DIR__ . '/config/module.config.php';
}
public function getServiceConfig()
{
return array(
'factories' => array(
'Album\Model\AlbumTable' => function ($sm) {
$tableGateway = $sm->get('AlbumTableGateway');
$table = new AlbumTable($tableGateway);
return $table;
},
'AlbumTableGateway' => function ($sm) {
$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
$resultSetPrototype = new ResultSet();
$resultSetPrototype->setArrayObjectPrototype(new
Album());
return new TableGateway('album', $dbAdapter, null,
$resultSetPrototype);
}
)
);
}
public function getControllerConfig()
{
return [
'factories' => [
Controller\AlbumController::class => function($container)
{
return new Controller\AlbumController(
$container->get(Model\AlbumTable::class)
);
},
],
];
}
}
?>
**composer.json**
{
"name" : "zendframework/skeleton-application",
"description" : "Skeleton Application for Zend Framework zend-mvc
applications",
"type" : "project",
"license" : "BSD-3-Clause",
"keywords" : [
"framework",
"mvc",
"zf"
],
"homepage" : "http://framework.zend.com/",
"minimum-stability" : "dev",
"prefer-stable" : true,
"require" : {
"php" : "^5.6 || ^7.0",
"zendframework/zend-component-installer" : "^1.0 || ^0.7 ||
^1.0.0-dev@dev",
"zendframework/zend-mvc" : "^3.0.1",
"zfcampus/zf-development-mode" : "^3.0"
},
"autoload" : {
"psr-4" : {
"Application\\" : "module/Application/src/"
}
},
"autoload-dev" : {
"psr-4" : {
"ApplicationTest\\" : "module/Application/test/"
}
},
"extra" : {
"zend-skeleton-installer" : [{
"name" : "zendframework/zend-developer-tools",
"constraint" : "^1.1.0",
"prompt" : "Would you like to install the developer
toolbar?",
"module" : true,
"dev" : true
}, {
"name" : "zendframework/zend-cache",
"constraint" : "^2.7.1",
"prompt" : "Would you like to install caching support?",
"module" : true
}, {
"name" : "zendframework/zend-db",
"constraint" : "^2.8.1",
"prompt" : "Would you like to install database support
(installs zend-db)?",
"module" : true
}, {
"name" : "zendframework/zend-mvc-form",
"constraint" : "^1.0",
"prompt" : "Would you like to install forms support?",
"module" : true
}, {
"name" : "zendframework/zend-json",
"constraint" : "^3.0",
"prompt" : "Would you like to install JSON
de/serialization support?"
}, {
"name" : "zendframework/zend-log",
"constraint" : "^2.9",
"prompt" : "Would you like to install logging support?",
"module" : true
}, {
"name" : "zendframework/zend-mvc-console",
"constraint" : "^1.1.10",
"prompt" : "Would you like to install MVC-based console
support? (We recommend migrating to zf-console, symfony/console, or
Aura.CLI)",
"module" : true
}, {
"name" : "zendframework/zend-mvc-i18n",
"constraint" : "^1.0",
"prompt" : "Would you like to install i18n support?",
"module" : true
}, {
"name" : "zendframework/zend-mvc-plugins",
"constraint" : "^1.0.1",
"prompt" : "Would you like to install the official MVC
plugins, including PRG support, identity, and flash messages?",
"module" : true
}, {
"name" : "zendframework/zend-psr7bridge",
"constraint" : "^0.2.2",
"prompt" : "Would you like to use the PSR-7 middleware
dispatcher?"
}, {
"name" : "zendframework/zend-session",
"constraint" : "^2.7.1",
"prompt" : "Would you like to install sessions support?",
"module" : true
}, {
"name" : "zendframework/zend-test",
"constraint" : "^3.0.1",
"prompt" : "Would you like to install MVC testing
support?",
"dev" : true
}, {
"name" : "zendframework/zend-servicemanager-di",
"constraint" : "^1.0",
"prompt" : "Would you like to install the zend-di
integration for zend-servicemanager?",
"module" : true
}
]
},
"scripts" : {
"cs-check" : "phpcs",
"cs-fix" : "phpcbf",
"development-disable" : "zf-development-mode disable",
"development-enable" : "zf-development-mode enable",
"development-status" : "zf-development-mode status",
"post-create-project-cmd" : "@development-enable",
"serve" : "php -S 0.0.0.0:8080 -t public public/index.php",
"test" : "phpunit"
}
}