Door
Gert Assen
op 05-09-2014 15:48
gewijzigd op 05-09-2014 15:52
1.584 views
Ik krijg een 'class not found error' die ik niet begrijp. Ik heb een nieuwe module toegevoegd aan een bestaande applicatie, nl overzichten.
In de controller Indexcontroller roep ik de volgende class aan om een form te laden:
<?php
class Overzichten_OverzichtenController extends Wis_Controller_Abstract
{
public function init()
{
}
public function indexAction()
{
$form = new Overzichten_Form_Rapportage();
$this->view->form = $form;
?>
Ik verwacht dat deze class dan wordt aangeroepen:
<?php
class Overzichten_Form_Rapportage extends Wis_Form_Abstract
{
public function init()
{
$this->setSubForms(array(
?>
De structuur is als volgt:
application - modules - overzichten - controllers - OverzichtenController.php en
application - modules - overzichten - forms - Rapportage.php
Echter als ik in de controller een form uit een andere module aanroep op dezelfde wijze gaat het wel goed.
en elke module heeft zijn eigen bootstrap.
De foutmelding is Fatal error: Class 'Overzichten_Form_Rapportage' not found in /var/www3/HRM/application/modules/overzichten/controllers/OverzichtenController.php on line 11.
Wie heeft een idee waar dit aan kan liggen?
Ik heb al eens eerder een nieuwe module toegevoegd op dezelfde wijze en dat ging wel goed.
Heb je de namespace er in staan boven je Ict_Form_Inname class?
<?php
namespace path\to\yourClass;
?>
Let je wel goed op hoofd en kleine letters in je bestandsnamen? (in Windows maakt dat geen verschil maar in Linux wel)
Er staat geen namespace in de class(es). Het is een bestaande applicatie, gebouwd door een ander bedrijf. Ik pas het alleen aan. Hij bestaat uit 8 modules, ik heb een half jaar geleden al 1 toegevoegd, op dezelfde wijze. Toen was het geen probleem. In geen enkele module, class o.i.d staat een namespace, alleen in de Zend/autoloader folder staan diverse, algemene, namespaces.
Het is inderdaad een Linux server, en hoofd en kleine letters staan allemaal goed. De applicatie is ontwikkeld op een windowsserver en geimplementeerd op een linux server, dus daar hebben we tijdens het testen en implementeren heel veel problemen mee gehad. Daarom let ik nu extra goed op hoofd/kleine letters.
Oké, maar als je niet kunt laten zien hoe het er nu uit ziet, wordt het voor ons een beetje lastig en koffiedik kijken.
Wat je wel zou kunnen doen...
Ga naar de autoloader class/code die de class zou moeten inladen. Als het goed is wordt daar een file opgebouwd die wordt geinclude of gerequired. Zoiets als:
<?php
$file = ...
include $file; // of require $file;
?>
Hiertussen zou je dan zoiets kunnen plaatsen:
<?php
$file = ...
if (!is_file($file)) {
echo '<br><br>niet gevonden: ' . $file;
exit;
}
include $file; // of require $file;
?>
Als het goed is, krijg je dan te zien welk bestand er niet kan worden geladen, en aan de hand van het path/bestandsnaam kun je zien wat er misgaat.
Ik dacht dat het duidelijk was welke aanroep ik bedoelde, maar voor de zekerheid nog een keer dan:
<?php
class Overzichten_OverzichtenController extends Wis_Controller_Abstract
{
public function init()
{
}
public function indexAction()
{
$form = new Overzichten_Form_Rapportage();
$this->view->form = $form;
if ($this->getRequest()->isPost())
{
$form->setDefaults($this->getRequest()->getParams());
if ($form->exposurehours->getValue('genereren'))
{
if ($this->isPostAndValid($form->exposurehours)) $this->_forward('exposurehours');
}
else if ($form->monthlyjobhours->getValue('genereren'))
{
if ($this->isPostAndValid($form->monthlyjobhours)) $this->_forward('monthlyjobhours');
}
}
}
is de aanroep voor deze :
<?php
class Overzichten_Form_Rapportage extends Wis_Form_Abstract
{
public function init()
{
$this->setSubForms(array(
'exposurehours' => new Overzichten_Form_Overzichten_Exposurehours(array('legend' => 'Exposure hours', 'class' => 'full')),
'totalmonthlyjobhours' => new Overzichten_Form_Overzichten_Totalmonthlyjobhours(array('legend' => 'Total monthly job hours', 'class' => 'full'))
));
parent::init();
}
}
Ik heb de plek nog niet kunnen vinden die je bedoeld, ga er straks weer mee aan de slag. Heb naast het programmeren nog andere taken en ben er nog niet echt aan toe gekomen.