views:

31

answers:

1

Hey, I seem to be climbing a pretty horrible learning curve. It's taking me hours to even get to the point where I can structure/write code. I originally wanted to be able to store a form or a model inside its respective module, for example: ./application/module/ModuleName/forms/ClassName.php but when I tried to instantiate a class with: $form = new ModuleName_Form_ClassName(); it failed. Therefore, I thought I would simplify everything by moving it to the default module. However it still isn't working. I'm still doing something wrong. I've no idea what.

Inside my controller action I have this:

// some other code
$form = new Form_Login();

On loading the action, I get this error message:

Fatal error: Class 'Form_Login' not found in /some folder/www/application/modules/default/controllers/AdministrationController.php on line 22

My application.ini contains:

appnamespace = "SomeModule"
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
resources.frontController.params.displayExceptions = 0
resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"
resources.modules[] = 

The form is stored inside ./application/modules/default/forms/Login.php

1. How can I troubleshoot this? The error message I am getting is next to useless.

2. I really think all of my problems might be solved if there was some way of debugging the __autoload() function. Is there not?

3. Can there not be a way of using models/forms from another Module inside the default module? That is what I wanted to do. I thought it would make everything more structured. If this isn't possible I just can't see how this would be useful at all...

Cheers,

An ailing newbie Zend developer.

+2  A: 

Sounds like you almost had it the first time. Let's say your module is Users and your form Login. In order for application/module/users/forms/Login.php to work:

  • The form class defined in that file needs to be called Users_Form_Login
  • You need resources.modules[] = in your application.ini to initialise the module resource (which you have)
  • You need a module bootstrap for that module (this is what sets up the module autoloader). So minimally you need a bootstrap class like this:

.

class Users_Bootstrap extends Zend_Application_Module_Bootstrap
{

}

defined at application/module/users/Bootstrap.php. The paths are case sensitive.

I agree that the autoloader can be quite difficult to debug, unfortunately it's one of those things that either works or it doesn't, but once you have it setup you can forget about it. Hopefully the above will answer your third question - yes you can use forms from another module inside the default one.

Tim Fountain
A missing module Bootstrap was my guess too - this is often overlooked. Unfortunately ZF1 is plagued with some configuration and getting-started issues like this but I do think it's worth persevering with for the benefits the framework delivers. ZF2 should avoid most of these issues.
David Caunt
That sounds about right, but creating a Bootstrap.php file in my module seems to cause this everywhere:Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 71 bytes) in /usr/share/zend/library/Zend/Loader/Autoloader.php on line 374
lhnz
lhnz
Yup, there's a post on there suggesting using _forward() to point at the same action could cause this - are you doing anything like that?
Tim Fountain
I worked it out. When I'd set up the Bootstrap.php against my module, I'd copied the Bootstrap.php file from inside the application directory and not edited it correctly. This is wrong since this copy of the Bootstrap extends Zend_Application_Bootstrap_Bootstrap instead of Zend_Application_Module_Bootstrap.Anyway, thanks for your help. :)
lhnz