Problem mit Zend Framework

lgorse

Mitglied
Hallo,

ich beschäftige mich seit neustem mit dem Zend Framework, doch beim Umsetzen des ersten Beispielskripts sit auch schon das erste Problem aufgetreten: Als Fehlermeldung erhalte ich
Code:
Fatal error: Uncaught exception 'Zend_Controller_Dispatcher_Exception' with message 
'Invalid controller specified (error)' in ...\ZendFramework-1.10.8\library\Zend\Controller\Dispatcher\Standard.php:248 
Stack trace: #0 ...\ZendFramework-1.10.8\library\Zend\Controller\Front.php(954):
Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http),
Object(Zend_Controller_Response_Http)) #1 ...\index.php(18): Zend_Controller_Front->dispatch()
#2 {main} thrown in ...\ZendFramework-1.10.8\library\Zend\Controller\Dispatcher\Standard.php on line 248

Das Skript sieht so aus:
PHP:
<?php 
	error_reporting(E_ALL|E_STRICT);
	ini_set('display_errors', true);
	date_default_timezone_set('Europe/London');
	
	$rootDir = dirname(dirname(__FILE__));
	set_include_path($rootDir . '/library' . PATH_SEPARATOR . get_include_path());
	
	require_once 'Zend/Loader.php';
	Zend_Loader::loadClass('Zend_Debug');
	Zend_Loader::loadClass('Zend_Controller_Front'); 
	
	// set up controller
	$frontController = Zend_Controller_Front::getInstance();
	$frontController->setControllerDirectory('../application/controllers'); 
	
	//run
	$frontController->dispatch();
?>

Ich hab XAMPP Lite mit unveränderter Konfiguration (Ich hab nur das Zend-Verzeichnis in den PHP Include Path aufgenommen). Im Verzeichnis ".../public/" liegt die Datei .htaccess mit folgendem Inhalt:

Code:
# Rewrite rules for Zend Framework
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule .* index.php

BS ist Win XP, im Internet hab ich leider keine passenden Problemlösungen gefunden. Könnt ihr da weiterhelfen?

Lg,
lgorse
 
Zuletzt bearbeitet:
Wo hast du denn das Beispiel her?
Das sieht für mich eher nach einem Tutorial für eine ältere Version des Zend Frameworks aus... Da musst du dringend auf die Versionsnummern achten.
 
Das Beispiel ist aus dem Buch "Zend Framework im Einsatz" (2009) und ich verwende die Version 1.10.8 des Frameworks.
 
Hi,

zeig doch mal bitte den gaueren Aufruf (URL), mit der Du versuchst, das Framework aufzurufen.

Das Problem ist einfach, dass er den übergebenen Controller nicht findet. Wenn kein Controller angegeben wurde, lädt das FW automatisch den Index-Controller (IndexAction). Sollte es diesen bei Dir auch nicht geben, ist der Fehler klar.

Die Controller sollten in der Ordnerstruktur unter "application/controllers" abgelegt werden. Wenn Du dein ZF-Projekt mit der mitgelieferten CLI erstellt hast, sollte die Ordnerstruktur ja schon vorhanden sein.

Optional könntest Du mal die von ZEND empfohlene .htaccess verwenden:

Code:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

VG,
Maeg
 
Zuletzt bearbeitet:
Ich rufe die index.php einfach ohne Parameter auf. Was muss ich tun, damit er den Controller findet?

Das mit der alternativen .htaccess probier ich mal aus.

// edit: Ich hab die .htaccess geändert, doch das bringt leider auch nichts.

Hier nochmal die Dateien:

/index.php
PHP:
<?php 
	error_reporting(E_ALL|E_STRICT);
	ini_set('display_errors', true);
	date_default_timezone_set('Europe/London');
	
	$rootDir = dirname(dirname(__FILE__));
	set_include_path($rootDir . '/library' . PATH_SEPARATOR . get_include_path());
	
	require_once 'Zend/Loader.php';
	Zend_Loader::loadClass('Zend_Debug');
	Zend_Loader::loadClass('Zend_Controller_Front'); 
	
	// set up controller
	$frontController = Zend_Controller_Front::getInstance();
	$frontController->setControllerDirectory('application/controllers'); 
	
	//run
	$frontController->dispatch();
?>

/application/controllers/IndexController.php
PHP:
<?php
	class IndexController extends Zend_Controller_Action {
		public function indexAction() {
			$this->view->assign('title', 'Hello World!');
		}
	}
?>

/view/scripts/index.phtml
HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
  <head>
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
    <title><?php echo $this->escape($this->title);?></title>
  </head>
  <body>
    <h1>
      <?php echo $this->escape($this->title);?>
    </h1>
  </body>
</html>

Wo liegt der Fehler?

Danke!
 
Zuletzt bearbeitet:
Was muss ich tun, damit er den Controller findet?

Definiere dein controller Pfad in der application.ini über die APPLICATION_PATH konstante ;)
PHP:
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"

Edit:
Hab jetzt erst gesehen das du ein veraltetes setup benutzt. Seit ZF 1.8 hat sich in der Bootstrap und index einges geändert. Schau dir das Quickstart Tutorial an, dort wird eine aktuelle vorgehensweise verwendet ein Projekt zu installieren.
 
Zuletzt bearbeitet:
Hallo zusammen.
Ich wollte kein neues thema aufmachen.
Ich hänge auch bei der weiterleitung über die .htaccess Datei.
Ich habe in der config von Xampp alles eingestellt, habe das ZF 1.11

Wenn ich absichtlicht einen falschen Pfad eingebe, kommt immer die Meldung:

Message: Invalid controller specified (test)

Ich bin so vorgegangen wie auf der Seite beschrieben (ab .htaccess), die sieht auch genauso bei mir aus:
http://www.zf-tutorials.de/archives/41/comment-page-1#comment-6921

Liegt das an meiner Version?
Ich bin am verzweifeln :-(
 
Versuch mal, den ErrorController einzurichten mit den Actions index und error. Wenn es dann funktioniert, funktioniert deine Weiterleitung über .htaccess und der Fehler muss irgendwo anders liegen.
 
Zurück