Hi,
I'm currently building a portal that will have a growing number of modules
running through this single portal and I've failed to completely figure out
how to get it all running. I've plowed through dozens of different posts
and threads about this, but can't quite wrap my head around what part I'm
missing. Any insight would be greatly appreciated!
My current directory structure is:
- application
- configs
- application.ini
- modules
- default
- ...
- guestbook
- controllers
- IndexController.php
- GuestbookController.php
- models
- Guestbook.php
- GuestbookMapper.php
- ...
- Bootstrap.php
- library
- ZendFramework
- public
- index.php
The application.ini file is:
[production]
phpSettings.display_startup_errors = 0
phpSettings.display_errors = 0
includePaths.library = APPLICATION_PATH "/../library"
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
appnamespace = "Application"
resources.frontController.params.displayExceptions = 0
resources.layout.layoutPath = APPLICATION_PATH
"/modules/guestbook/layouts/scripts"
resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"
resources.view[] =
My current index.php file is:
// Define path to application directory
defined('APPLICATION_PATH')
|| define('APPLICATION_PATH', realpath(dirname(__FILE__) .
'/../application'));
// Define application environment
defined('APPLICATION_ENV')
|| define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ?
getenv('APPLICATION_ENV') : 'development'));
$includePaths = array(
APPLICATION_PATH . '/../library',
APPLICATION_PATH .
'/modules/default/controllers',
APPLICATION_PATH . '/modules/default/models',
APPLICATION_PATH .
'/modules/guestbook/controllers',
APPLICATION_PATH . '/modules/guestbook/models',
get_include_path());
set_include_path(implode(PATH_SEPARATOR, $includePaths));
/** Zend_Application */
require_once 'ZendFramework/library/Zend/Application.php';
// Create application, bootstrap, and run
$application = new Zend_Application(
APPLICATION_ENV,
APPLICATION_PATH . '/configs/application.ini'
);
$controllerArray = array(
'default' => APPLICATION_PATH .
'/modules/default/controllers',
'guestbook' => APPLICATION_PATH .
'/modules/guestbook/controllers');
$front = Zend_Controller_Front::getInstance();
$front->setControllerDirectory($controllerArray);
$front->addModuleDirectory(APPLICATION_PATH . '/modules');
$application->bootstrap()
->run();
Currently, my Bootstrap.php file is empty:
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
}
If I pull up the base url (http://rebuild.local), it pulls up the default
index controller, as expected. If i go to http://rebuild.local/guestbook,
it routes to the guestbook module IndexController (I just have a placeholder
here):
class Guestbook_IndexController extends Zend_Controller_Action
{
public function init() {
/* Initialize action controller here */
}
public function indexAction() {
echo "Guestbook Index Controller";
}
public function guestbookAction() {
}
}
However, when I try to pull up the GuestbookController
(http://rebuild.local/guestbook/guestbook):
class Guestbook_GuestbookController extends Zend_Controller_Action
{
public function indexAction() {
$guestbook = new Modules_Guestbook_Model_GuestbookMapper();
$this->view->entries = $guestbook->fetchAll();
}
public function signAction() {
$request = $this->getRequest();
$form = new Application_Form_Guestbook();
if($this->getRequest()->isPost()) {
if($form->isValid($request->getPost())) {
$comment = new
Application_Model_Guestbook($form->getValues());
$mapper = new
Application_Model_GuestbookMapper();
$mapper->save($comment);
return $this->_helper->redirector('index');
}
}
$this->view->form = $form;
}
}
I get the following error:
Fatal error: Class 'Modules_Guestbook_Model_GuestbookMapper' not found in
C:\Users\ben\Zend\workspaces\DefaultWorkspace\rebuild\application\modules\guestbook\controllers\GuestbookController.php
on line 7
GuestbookMapper.php (a model class):
class Guestbook_Application_Guestbook_Model_GuestbookMapper
{
protected $_dbTable;
public function setDbTable($dbTable) {
if(is_string($dbTable)) {
$dbTable = new $dbTable();
}
if(!$dbTable instanceof Zend_Db_Table_Abstract) {
throw new Exception('Invalid table data gateway
provided');
}
$this->_dbTable = $dbTable;
return $this;
}
....
}
I believe my limitation here is a misunderstanding of the routing and how
the app is trying to find the GuestbookMapper class and possibly the naming
scheme I should be using for the class itself, though I've played around
with a number of different ways of fixing that.
Any input on the specific technical issue I'm facing would be really
helpful. One caveat that I'm struggling with is that we have about five
developers building different modules and I'd like them to be doing as
little module-specific bootstrapping/configuration/etc as possible so they
can just build the meat of each module and drop it in, but I'm beyond my own
technical know-how at this point.
Thanks!
--
View this message in context:
http://n4.nabble.com/Conceptual-Technical-Question-for-Multiple-Module-App-ZF-1-10-tp1754760p1754760.html
Sent from the Zend Framework mailing list archive at Nabble.com.