Tutorial: Erstellen einer Webseite, Exception

Hier dreht sich alles um die auf der Webseite veröffentlichten Tutorials. // This forum is all about the APF tutorials.
dirtdevel
Beiträge: 28
Registriert: 26.12.2011, 23:51:51

Tutorial: Erstellen einer Webseite, Exception

Beitrag von dirtdevel » 28.12.2011, 23:00:37

Hallo,
ich versuche mich gerade an diesem http://adventure-php-framework.org/Seit ... -erstellen Tutorial.
Leider bekomme ich eine Exception geworfen, schätze ich habe da irgendwas falsch im content-template gemacht, welches über den documentcontroller den inhalt der Datenbank ausgeben soll.
Uncaught exception!
Exception-ID: a4fbb7b04905ef4d3fcab2e918b3022f
Type: ParserException
Message: [Document::__extractDocumentController()] Document controller specification does not contain a valid controller class definition. Please double check the template code and consult the documentation. Template code: <@controller namespace="sites::testsite::pres::documentcontroller" [file="content_v1_controller"] class="content_v1_controller" @>
Number: 0
Gruß

APFelsahne
Beiträge: 222
Registriert: 18.03.2010, 13:13:07
Wohnort: Ludwigshafen am Rhein
Kontaktdaten:

Re: Tutorial: Erstellen einer Webseite, Exception

Beitrag von APFelsahne » 29.12.2011, 10:31:57

Hi!

Hast du bei deiner Deklaration des Controllers im Template folgendes verwendet?

Code: Alles auswählen

<@controller namespace="sites::testsite::pres::documentcontroller" [file="content_v1_controller"] class="content_v1_controller" @>
Die Angaben, die mit [] umschlossen sind, sind in der Dokumentation Bezeichner, dass etwas optional ist. wenn du es verwenden willst, kannst du es hinschreiben, aber ohne die Brackets (--> [] ).
Grüße, Florian
BildAPF-Extension wsCatalyst

dirtdevel
Beiträge: 28
Registriert: 26.12.2011, 23:51:51

Re: Tutorial: Erstellen einer Webseite, Exception

Beitrag von dirtdevel » 29.12.2011, 11:11:28

Hi,
Die Angaben, die mit [] umschlossen sind, sind in der Dokumentation Bezeichner, dass etwas optional ist. wenn du es verwenden willst, kannst du es hinschreiben, aber ohne die Brackets (--> [] ).
Genau das war das Problem ;)
Hatte daraufhin noch einige weitere Exceptions, welche ich selber beheben konnte.

Allerdings zeigt mir nun das APF keine Seite mehr an, wenn ich den Documentcontroller über das Template aufrufe:
Geht:

Code: Alles auswählen

Ausgelagerte Template Datei, das hier ist nur ein Platzhalter, welcher über die Taglibs auf die Seite geladen wird.
Geht nicht:

Code: Alles auswählen

<@controller namespace="sites::testsite::pres::documentcontroller" file="content_v1_controller" class="content_v1_controller" @>
Ich bekomme einen weißen Bildschirm ohne Quellcode ausgeliefert.
Habe die Tabelle wie im Tutorial beschrieben angelegt und selbst einen Datensatz mit folgendem SQL-Query hinzugefügt:

Code: Alles auswählen

INSERT INTO `testsite_content` (`PageURLName`, `PageTitle`, `PageContent`)
VALUES ('home', 'Startseite', 'Willkommen auf meiner ersten APF generierten Startseite!\n\nIch probiere mich gerade an der Verwendung des Documentcontroller oder besser gesagt das CMS über die Datenbank.\n\nErster Versuch!');
Kann das evtl. daran liegen, wie ich auf die Seite zugreife ($_GET Parameter)?

Gruß,
dirtdevel

Benutzeravatar
dr.e.
Administrator
Beiträge: 4527
Registriert: 04.11.2007, 16:13:53

Re: Tutorial: Erstellen einer Webseite, Exception

Beitrag von dr.e. » 29.12.2011, 14:20:41

Hi,

kannst du mal die Url posten? Sofern du den Controller 1:1 aus dem Tutorial nutzt, sollte ?Seite=home zum Erfolg führen.
Viele Grüße,
Christian

dirtdevel
Beiträge: 28
Registriert: 26.12.2011, 23:51:51

Re: Tutorial: Erstellen einer Webseite, Exception

Beitrag von dirtdevel » 29.12.2011, 15:17:28

Hi,

kannst du mal die Url posten? Sofern du den Controller 1:1 aus dem Tutorial nutzt, sollte ?Seite=home zum Erfolg führen.
Ich greife eigentlich über http://localhost/Projekte/testsite/ auf die Seite zu.
Habe auch http://localhost/Projekte/testsite/index.php?Seite=home probiert, allerdings komme ich zum selben Ergebnis.


Ich poste mal die von mir verwendeten Dateien.
~/Projekte/testsite/apps/sites/testsite/pres/documentcontroller/content_v1_controller.php

Code: Alles auswählen

<?php

import('tools::request', 'RequestHandler');

class content_v1_controller extends base_controller {

    public function transformContent() {
        $cM = &$this->getServiceObject('core::database', 'ConnectionManager');
        $SQL = &$cM->getConnection('content-database');
        
        $page = RequestHandler::getValue('section', 'home');
        $page = $SQL->escapeValue($page);
        
        $select = 'SELECT PageContent
                   FROM testsite_content
                   WHERE PageURLName = \''.$page.'\'
                   LIMIT 1';
        $result = $SQL->executeTextStatement($select);
        $data = $SQL->fetchData($result);
        
        $this->setContent($data['PageContent']);  
    }

}

?>
~/Projekte/testsite/apps/sites/testsite/pres/templates/website.html

Code: Alles auswählen

<html>
<head>
<title>TestWebSite</title>
<meta charset="utf-8" />
<core:importdesign namespace="sites::testsite::pres::templates" template="meta" />
<core:importdesign namespace="sites::testsite::pres::templates" template="link" />
</head>
<body>
<section>
<header>
<core:importdesign namespace="sites::testsite::pres::templates" template="header" />
</header>
<nav>
<core:importdesign namespace="sites::testsite::pres::templates" template="nav" />
</nav>
<article>
<core:importdesign namespace="sites::testsite::pres::templates" template="content" />
</article>
</section>
<footer>
<core:importdesign namespace="sites::testsite::pres::templates" template="footer" />
</footer>
</body>
</html>
~/Projekte/testsite/apps/sites/testsite/pres/templates/content.html

Code: Alles auswählen

<@controller
    namespace="sites::testsite::pres::documentcontroller"
    file="content_v1_controller"
    class="content_v1_controller"
@>
~/Projekte/testsite/index.php

Code: Alles auswählen

<?php

date_default_timezone_set('Europe/Berlin');

include_once('./apps/core/pagecontroller/pagecontroller.php');

import('core::frontcontroller', 'Frontcontroller');

$fC = &Singleton::getInstance('Frontcontroller');
$fC->setContext('projectone');

echo $fC->start('sites::testsite::pres::templates', 'website');

?>

dirtdevel
Beiträge: 28
Registriert: 26.12.2011, 23:51:51

Re: Tutorial: Erstellen einer Webseite, Exception

Beitrag von dirtdevel » 29.12.2011, 17:05:35

So ich glaube ich bin dem Problem jetzt auf den Fersen ;)

Ich habe das Archiv, welches am Ende des Tutorials angegeben ist heruntergeladen und entpackt.

Dabei habe ich dasselbe Ergebnis wie bei mir - sprich: weisse Seite ohne Quelltext.

Nun ist mir eingefallen, dass ich noch die Datenbank-config aus dem Beispiel anpassen muss.
Dies habe ich auch getan.

Doch das Problem besteht immernoch, es muss also irgendein Problem mit der Verbindung zur Datenbank vorliegen.
Was mich an der ganzen Sache nun wundert ist, weshalb keine Exceptions regnen.

Sonst werde ich sogar darauf hingewiesen, dass ich die Zeitzone angeben soll und bei der Datenbank kam nichts.
Hat jemand dazu eine Lösung?

Benutzeravatar
dr.e.
Administrator
Beiträge: 4527
Registriert: 04.11.2007, 16:13:53

Re: Tutorial: Erstellen einer Webseite, Exception

Beitrag von dr.e. » 29.12.2011, 17:25:41

Hallo dirtdevel,
Sonst werde ich sogar darauf hingewiesen, dass ich die Zeitzone angeben soll und bei der Datenbank kam nichts.
PHP hat ab Version 5 die Eigenheit, dass die Zeitzone nicht standardmäßig konfiguriert ist. Dies kannst du entweder per php.ini oder - wie schon von dir eingeführt - per index.php lösen.

Dass eine weiße Seite angezeigt wird, kann durchaus daran liegen, dass kein Fehler angezeigt wird. Füge bitte ein

Code: Alles auswählen

ini_set('display_errors', 'on');
error_reporting(E_ALL); 
am Anfang der index.php ein, vielleicht hilft das ja den Fehler zu finden. Falls nicht, bitte nach

Code: Alles auswählen

include_once('./apps/core/pagecontroller/pagecontroller.php'); 
ein
Registry::register( 'apf::core', 'ErrorHandler', null);
Registry::register( 'apf::core', 'ExceptionHandler', null);
Diese beiden Statements schalten das automatische APF-Fehler- und Exception-Handling aus.

Was den Code angeht, solltest du sowohl mit deiner als auch mit der heruntergeladenen Variante eine Anzeige bekommen. Zur Datenbank-Konfiguration kannst du unter http://adventure-php-framework.org/Seit ... ionManager Details nachlesen.
Viele Grüße,
Christian

dirtdevel
Beiträge: 28
Registriert: 26.12.2011, 23:51:51

Re: Tutorial: Erstellen einer Webseite, Exception

Beitrag von dirtdevel » 29.12.2011, 18:15:00

So.
Habe jetzt mal die Dateien auf den FreeBSD Server rübergeschifft.
Da geht es ^^

Das heisst, dass irgendwie meine lokale LAMP Installation irgendwelche Probleme hat.
Wüsstest du was das evtl. sein könnte?

Gruß

Benutzeravatar
dr.e.
Administrator
Beiträge: 4527
Registriert: 04.11.2007, 16:13:53

Re: Tutorial: Erstellen einer Webseite, Exception

Beitrag von dr.e. » 29.12.2011, 18:20:20

Hmm, das ist schwierig zu sagen. Welche PHP-Version setzt du denn ein? Welches OS?
Viele Grüße,
Christian

dirtdevel
Beiträge: 28
Registriert: 26.12.2011, 23:51:51

Re: Tutorial: Erstellen einer Webseite, Exception

Beitrag von dirtdevel » 29.12.2011, 18:22:48

Hab es jetzt nochmal selber gelöst:

In der Datenbank-config war die MySQL Erweiterung falsch eingestellt, folgendes war richtig:

Code: Alles auswählen

DB.Type = "MySQLi
Da die mysql Funktionen nicht funktionieren bzw. ich die irgendwann mal deaktiviert habe.

Jetzt geht es aufjedenfall, auch das dynamische Seitenwechseln.
Danke für die Hilfe ;)


Wieso benutzt ihr eigentlich als default die veralteten mysql-* Funktionen anstatt PDO?

Gruß

Benutzeravatar
dr.e.
Administrator
Beiträge: 4527
Registriert: 04.11.2007, 16:13:53

Re: Tutorial: Erstellen einer Webseite, Exception

Beitrag von dr.e. » 29.12.2011, 18:29:53

Hi,

freut mich, dass nun alles funktioniert.
Wieso benutzt ihr eigentlich als default die veralteten mysql-* Funktionen anstatt PDO?
Warum sollen diese veraltet sein? Ich behaupte solange das Gegenteil, wie du mit auf php.net eine entsprechende Passage in der Doku zeigen kannst. ;) PDO ist für mich eine Erweiterung/Alternative, mit der es sicher einfacher ist, mehrere Datenbank-Typen zu adressieren als mit mysql(i), jedoch ist es völlig legitim die beiden einzusetzen. mysql_* ist sicher etwas betagt, deswegen nutze ich für mich nur noch mysqli_*.
Viele Grüße,
Christian

dirtdevel
Beiträge: 28
Registriert: 26.12.2011, 23:51:51

Re: Tutorial: Erstellen einer Webseite, Exception

Beitrag von dirtdevel » 29.12.2011, 18:39:36

Warum sollen diese veraltet sein?
Reden wir beide von mysql?

MySQLi und PDO sind die aktuellen Erweiterungen. Mich hat es nur gewundert, weshalb ihr in der DB-Konfiguration den alten mysql Typ als default wählt.

Benutzeravatar
dr.e.
Administrator
Beiträge: 4527
Registriert: 04.11.2007, 16:13:53

Re: Tutorial: Erstellen einer Webseite, Exception

Beitrag von dr.e. » 29.12.2011, 20:27:46

Ich spreche von mysql und mysqli. Zu mysql steht im Manual ein
Although this MySQL extension is compatible with MySQL 4.1.0 and greater, it doesn't support the extra functionality that these versions provide. For that, use the MySQLi extension.
Das bedeutet für mich nicht "deprecated".
MySQLi und PDO sind die aktuellen Erweiterungen.
Wie das Manual schon sagt: diese haben mehr Funktionen und sind daher sicher zu bevorzugen, als veraltet und "läuft in Version 5.4 aus" ist mysql nicht gekennzeichnet.
Mich hat es nur gewundert, weshalb ihr in der DB-Konfiguration den alten mysql Typ als default wählt.
Wo siehst du den default? :? In der EXAMPLE_connections.ini des apf-configpack-* sind beide Definitionen als Beispiele enthalten.
Viele Grüße,
Christian

dirtdevel
Beiträge: 28
Registriert: 26.12.2011, 23:51:51

Re: Tutorial: Erstellen einer Webseite, Exception

Beitrag von dirtdevel » 29.12.2011, 20:35:20

Das steht auch im Manuel:
Recommended API

It is recommended to use either the mysqli or PDO_MySQL extensions. It is not recommended to use the old mysql extension for new development. A detailed feature comparison matrix is provided below. The overall performance of all three extensions is considered to be about the same. Although the performance of the extension contributes only a fraction of the total run time of a PHP web request. Often, the impact is as low as 0.1%.
Deiner Argumentation zur Folge wäre man mit PHP 4, Windows 2000 und irgendwelche x-beliebigen Frameworks immernoch bestens ausgestattet :D

Ich kann mir vorstellen, dass das mitschleppen der Instanzen bei PDO und MySQLi etwas, dezent gesagt, aufwendig ist und sicher, funktionieren wird/tut beides, aber ich denke, dass man doch komplett eines der aktuellen OOP Ansätze verwenden soll um den hohen Standard des restlichen Frameworks gerecht zu werden :P

Benutzeravatar
dr.e.
Administrator
Beiträge: 4527
Registriert: 04.11.2007, 16:13:53

Re: Tutorial: Erstellen einer Webseite, Exception

Beitrag von dr.e. » 29.12.2011, 22:29:22

Wir einigen uns auf unentschieden, ok? ;)
Ich kann mir vorstellen, dass das mitschleppen der Instanzen bei PDO und MySQLi etwas, dezent gesagt, aufwendig ist und sicher, funktionieren wird/tut beides, aber ich denke, dass man doch komplett eines der aktuellen OOP Ansätze verwenden soll um den hohen Standard des restlichen Frameworks gerecht zu werden :P
PDO ist aktuell für das APF in Arbeit (siehe viewtopic.php?f=10&t=891). Sofern du dich daran beteiligen möchtest, immer gerne.
Viele Grüße,
Christian

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast