2

I am getting an error as ;

Argument 1 passed to Album\Controller\AlbumController::__construct() must be an instance of Album\Controller\AlbumTable, instance of Album\Model\AlbumTable given,, called in /var/www/html/zf/module/Album/src/Module.php on line 43 

My Module.php is;

<?php namespace Album; use Zend\ModuleManager\Feature\ConfigProviderInterface; use Zend\Db\Adapter\AdapterInterface; use Zend\Db\ResultSet\ResultSet; use Zend\Mvc\ModuleRouteListener; use Zend\Mvc\MvcEvent; use Zend\Db\TableGateway\TableGateway; class Module implements ConfigProviderInterface { public function getConfig() { return include __DIR__ . '/../config/module.config.php'; } // Add this method: public function getServiceConfig() { return [ 'factories' => [ Model\AlbumTable::class => function($container) { $tableGateway = $container->get(Model\AlbumTableGateway::class); return new Model\AlbumTable($tableGateway); }, Model\AlbumTableGateway::class => function ($container) { $dbAdapter = $container->get(AdapterInterface::class); $resultSetPrototype = new ResultSet(); $resultSetPrototype->setArrayObjectPrototype(new Model\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) ); }, ], ]; } } 

My AlbumController is like;

<?php namespace Album\Controller; use Zend\Mvc\Controller\AbstractActionController; use Zend\View\Model\ViewModel; use Album\Model; class AlbumController extends AbstractActionController { // Add this property: private $table; // Add this constructor: public function __construct(AlbumTable $table) { $this->table = $table; } public function indexAction() { return new ViewModel([ 'albums' => $this->table->fetchAll(), ]); } public function addAction() { } public function editAction() { } public function deleteAction() { } } 

Can you please tell me what I am doing wrong? I am very new in Zend Framework. It is the tutorial application I am trying to run.I followed all steps but there were a lot of issues and I solved all those one by one , now I am stuck here.

4
  • So what about that error message is in any way cryptic or difficult to understand? Commented Apr 10, 2017 at 11:40
  • I have mentioned the error. It is easy one to understand what is the error. But can not understand the solution. Commented Apr 10, 2017 at 11:41
  • conclusion : must be an instance of Album\Controller\AlbumTable, instance of Album\Model\AlbumTable given Commented Apr 10, 2017 at 11:48
  • Yes I understand, I have added the AlbumController class , can you please check what is wrong here? Commented Apr 10, 2017 at 11:51

2 Answers 2

3

you are using illegal dependency so to speak,

// Here you are returning Model\AlbumTable object // while your Controller\AlbumController needs a Controller\AlbumTable instance return new Controller\AlbumController( $container->get(Model\AlbumTable::class) ); 

so to solve this :

return new Controller\AlbumController( $container->get(Controller\AlbumTable::class) ); 

in case if you need to use Model\AlbumTable as a dependency, so you will need to set it in your controller as follows :

use Model\AlbumTable as AlbumTableModel; ... ... public function __construct(AlbumTableModel $table) { $this->table = $table; } 
Sign up to request clarification or add additional context in comments.

Comments

1

Add the AlbumTable class in AlbumController.php.

use Album\Model\AlbumTable;

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.