Fragen zu "Erstellen einer Website"

Hier finden sich Fragen und Ergänzung zur Dokumentation. // All questions and discussions about the documentation.
se2bass
Beiträge: 23
Registriert: 06.02.2010, 19:47:11

Fragen zu "Erstellen einer Website"

Beitrag von se2bass » 07.02.2010, 14:23:35

Hallo,
Da bin ich wieder :D
Da ich mich ja mit der APF nicht so auskenne und das ändern will bin ich nach erfolgreichem "abschluss" des ersten Tutorials nun zum "nächsten" übergegangen und hier habe ich auch wieder ein paar fragen:

1. Stimmt die Ordnerstruktur folgendermasen:

Code: Alles auswählen

testwebiste/
  apps/
    sites/
      testwebsite/
        pres/
          templates/
          documentcontroller/
  index.php
2. Hat sich in der neuen Version etwas bzgl. des MySQLHandler's geänder das er jetzt zufällig MySQLxHandler heißt?
3. Nachdem ich jetzt das mit dem MySQLHandler (wie bei 2 beschrieben) geändert hatte kommt der folgende Fehler:
"Fatal error: Class 'RequestHandler' not found in content_v1_controller.php on line 16"
Hat sich da auch was geändert, und wo finde ich den RequestHandler nun?
4. Es werden ja bei der APF Module mitgeliefert wie rufe ich diese auf? (Also wie benutze ich diese?)
Gruß
se2bass

Benutzeravatar
Screeze
Beiträge: 1920
Registriert: 05.08.2009, 09:49:04
Kontaktdaten:

Re: Fragen zu "Erstellen einer Website"

Beitrag von Screeze » 07.02.2010, 14:37:34

Hi,
1. Stimmt die Ordnerstruktur folgendermasen:
edit: sry mein fehler, sollte so stimmen.

2. Hat sich in der neuen Version etwas bzgl. des MySQLHandler's geänder das er jetzt zufällig MySQLxHandler heißt?
Hier findest du die wichtigsten änderungen von 1.11, das tutorial baut noch auf 1.10 auf, das wird noch überarbeitet:
http://adventure-php-framework.org/Seit ... lease/1.11
Refactoring: Die Klasse MySQLHandler wurde entfernt, da sie bereits in 1.10 als veraltet gekennzeichnet wurde. Im Zuge dieser Änderungen wurden die Komponenten der Datenbank-Abstraktion überarbeitet.
3. Nachdem ich jetzt das mit dem MySQLHandler (wie bei 2 beschrieben) geändert hatte kommt der folgende Fehler:
"Fatal error: Class 'RequestHandler' not found in content_v1_controller.php on line 16"
Hat sich da auch was geändert, und wo finde ich den RequestHandler nun?
Der Request handler muss vermutlich erst noch eingebunden werden.
Hierzu gibt es die import funktion:

Code: Alles auswählen

import('tools::request', 'RequestHandler');
4. Es werden ja bei der APF Module mitgeliefert wie rufe ich diese auf? (Also wie benutze ich diese?)
Dazu schau dir am besten mal die dokumentation des Usermanagement moduls an:
http://adventure-php-framework.org/Seit ... management
Da sollte das klarer werden, andernfalls frag nochmal nach.

Ich hoffe ich konnte helfen,
Screeze
Zuletzt geändert von Screeze am 07.02.2010, 15:35:54, insgesamt 1-mal geändert.

se2bass
Beiträge: 23
Registriert: 06.02.2010, 19:47:11

Re: Fragen zu "Erstellen einer Website"

Beitrag von se2bass » 07.02.2010, 14:55:07

Hallo,
Danke für die Hilfe soweit habe ich das jetzt auch verstanden ...
Nun habe ich leider folgendes Problem in dem Tutorial wird ja folgendes gemacht:

Code: Alles auswählen

$page =  RequestHandler::getValue('Seite','Startseite'); // Wert von $page ist bei mir mom. Startseite
$page = $SQL->escapeValue($page);
Nachdem ich den Import des RequestHander's eingebaut hatte kahm direkt ein neuer fehler und ich habe mir nach dem Methodenaufruf des RequestHandler's den Wert ausgeben lassen und es kommt "Startseite" das ist ja soweit OK wenn ich nun die Variabele Page an die Methode "escapeValue" übergebe kommt folgender Fehler:
mysql_real_escape_string() expects parameter 2 to be resource, null given
Nun habe ich mir auch in der Funktion die folgendermasen aussiert:

Code: Alles auswählen

public function escapeValue($value){
     return mysql_real_escape_string($value,$this->__dbConn);
     // end function
}
die Variabele "value" ausgeben lasen und auch hier kommt "Startseite".

Dann kan das Problem ja nur an der Verbindung liegen aber diese wird doch automatisch hergestellt oder? (__connect ist ja protected)
Gruß
se2bass

Benutzeravatar
Screeze
Beiträge: 1920
Registriert: 05.08.2009, 09:49:04
Kontaktdaten:

Re: Fragen zu "Erstellen einer Website"

Beitrag von Screeze » 07.02.2010, 15:04:48

Hier liegt in der Tat ein fehler an der Datenbankverbindung vor.

Hast du die Datenbank - gemäß tutorial - konfiguriert? Wenn ja zeig bitte mal deine konfigurationsdatei.

se2bass
Beiträge: 23
Registriert: 06.02.2010, 19:47:11

Re: Fragen zu "Erstellen einer Website"

Beitrag von se2bass » 07.02.2010, 15:30:54

Hallo,
Die Konfiguration ist wie im Tutorial angegeben durchgeführt:
"apps\config\core\database\sites\testwebsite\DEFAULT_connections.ini"

Code: Alles auswählen

[MySQL] 
DB.Host = "localhost" ; Servername oder IP-Adresse der Datenbank 
DB.User = "root" ; Benutzer 
DB.Pass = "" ; Passwort 
DB.Name = "test" ; Name der Datenbank
Gruß
se2bass

Benutzeravatar
Screeze
Beiträge: 1920
Registriert: 05.08.2009, 09:49:04
Kontaktdaten:

Re: Fragen zu "Erstellen einer Website"

Beitrag von Screeze » 07.02.2010, 15:35:28

ääh mir fällt grad was auf - meine anmerkung zu der ordnerstruktur war falsch, deine war schon richtig.

wenn ich dich richtig verstanden habe benutzt du jetzt einfach den MysqlxHandler. Ich bin mir nicht sicher, denke aber du musst den ConnectionManager verwenden:
http://adventure-php-framework.org/Seit ... ionManager

Probiere es mal damit.

se2bass
Beiträge: 23
Registriert: 06.02.2010, 19:47:11

Re: Fragen zu "Erstellen einer Website"

Beitrag von se2bass » 07.02.2010, 15:53:24

Hallo,
Hab das jetzt soweit ausporbiert nur jetzt hat er ein "Problem" mit dem Config File:
"[configurationManager->getConfiguration()] Requested configuration with name "DEFAULT_connections.ini" cannot be loaded from namespace "core::database" with context "sites::testwebsite::pres::templates"!"

Ich will doch nicht das die Config im template Ordner liegt?`
Gruß
se2bass

Benutzeravatar
Screeze
Beiträge: 1920
Registriert: 05.08.2009, 09:49:04
Kontaktdaten:

Re: Fragen zu "Erstellen einer Website"

Beitrag von Screeze » 07.02.2010, 15:56:51

Am besten du setzt den context in deiner index.php mittels:

Code: Alles auswählen

$fC->set('Context','sites::testwebsite');
vorrausgesetzt du nutz den FrontController.

oder du legst die config datei hier an:
"apps\config\core\database\sites\testwebsite\pres\templates\DEFAULT_connections.ini"

se2bass
Beiträge: 23
Registriert: 06.02.2010, 19:47:11

Re: Fragen zu "Erstellen einer Website"

Beitrag von se2bass » 07.02.2010, 16:06:06

Hallo,
Ich nutze den Pagecontroller wie im Tutorial aber dein Befehl ging auch mit dem Objekt von diesem ...
Ich habs nun soweit das ich wieder beim "ausgangsfehler" also bei diesem bin:
mysql_real_escape_string() expects parameter 2 to be resource, null given
Jetzt müsste er doch eine Verbindung haben oder nicht?
Gruß
se2bass

Benutzeravatar
Screeze
Beiträge: 1920
Registriert: 05.08.2009, 09:49:04
Kontaktdaten:

Re: Fragen zu "Erstellen einer Website"

Beitrag von Screeze » 07.02.2010, 16:10:38

benutzt du jetzt den connection manager? zeig doch mal deinen ganzen (relevanten) code

se2bass
Beiträge: 23
Registriert: 06.02.2010, 19:47:11

Re: Fragen zu "Erstellen einer Website"

Beitrag von se2bass » 07.02.2010, 16:11:59

Hallo,
Ja ich benutze jetzt den Connection Manager:

Code: Alles auswählen

<?php

import('core::database','connectionManager');
//import('core::database','MySQLxHandler');
import('tools::request', 'RequestHandler');

class content_v1_controller extends baseController {
	
	function content_v1_controller(){
	
	}  
	
	function transformContent(){ 
		$CpnnectionManager = &$this->__getServiceObject('core::database','connectionManager'); 
		$DBConnection =  &$CpnnectionManager->getConnection('MySQL');
		
		// Instanz der Datenbank-Abstraktionsklasse holen  
		$SQL =  $this->__getServiceObject('core::database','MySQLxHandler');  
		
		// URL-Parameter beziehen  
		$page =  RequestHandler::getValue('Seite','Startseite');
		
		// Parameter gegen SQL-Injections absichern  
		echo $page;
		$page = $SQL->escapeValue($page);
		echo $page;
		
		/* Inhalt der Seite auslesen  
		$select =  'SELECT PageContent  FROM demopage_content  WHERE PageURLName = \''.$page.'\'  LIMIT 1';  
		$result =  $SQL->executeTextStatement($select);  
		$data =  $SQL->fetchData($result);  
		
		// Inhalt der Seite ausgeben  
		$this->__Content = $data['PageContent'];  */
	}
}

?>
Gruß
se2bass

Benutzeravatar
Screeze
Beiträge: 1920
Registriert: 05.08.2009, 09:49:04
Kontaktdaten:

Re: Fragen zu "Erstellen einer Website"

Beitrag von Screeze » 07.02.2010, 16:17:03

du beziehst den connection manager (richtig), beziehst dann die verbindung von diesem (richtig) lädst dir dann aber noch den mysqlxhandler manuell (falsch) und arbeitest mit diesem weiter (falsch)

Code: Alles auswählen

$CpnnectionManager = &$this->__getServiceObject('core::database','connectionManager');
      $DBConnection =  &$CpnnectionManager->getConnection('MySQL');
      
du müstest statt mit $SQL einfach mit $DBConnection weiterarbeiten.

das hier brauchst du garnichtmehr:

Code: Alles auswählen

      // Instanz der Datenbank-Abstraktionsklasse holen 
      $SQL =  $this->__getServiceObject('core::database','MySQLxHandler');  

se2bass
Beiträge: 23
Registriert: 06.02.2010, 19:47:11

Re: Fragen zu "Erstellen einer Website"

Beitrag von se2bass » 07.02.2010, 16:26:34

Hallo,
Also ich hab jetzt eine funktionierende Version, wenn Ihr wollt könnt ihr das Tutorial demnach ja "reparieren":

index.php:

Code: Alles auswählen

<?php
// Fehlermeldung konfigurieren (Es treten sonst Fehler wie unter 
// http://forum.adventure-php-framework.org/de/viewtopic.php?f=7&t=32 
// beschrieben auf!) 
ini_set('html_errors','off'); 

// PageController einbinden 
require_once('apps/core/pagecontroller/pagecontroller.php'); 

// Seite erzeugen 
$page = new Page(); 

// Template laden 
$page->set('Context','sites::testwebsite');
$page->loadDesign('sites::testwebsite::pres::templates','website'); 

// Seite transformieren und ausgeben 
echo $page->transform();

?>
content_v1_controller.php:

Code: Alles auswählen

<?php

import('core::database','connectionManager');
import('tools::request', 'RequestHandler');

class content_v1_controller extends baseController {
	
	function content_v1_controller(){
	
	}  
	
	function transformContent(){ 
		$CpnnectionManager = &$this->__getServiceObject('core::database','connectionManager'); 
		$DBConnection =  &$CpnnectionManager->getConnection('MySQL');
		
		// URL-Parameter beziehen  
		$page =  RequestHandler::getValue('Seite','Startseite');
		
		// Parameter gegen SQL-Injections absichern  
		$page = $DBConnection->escapeValue($page);
		
		// Inhalt der Seite auslesen  
		$select =  'SELECT * FROM demopage_content WHERE PageURLName = \''.$page.'\'  LIMIT 1';  
		$result =  $DBConnection->executeTextStatement($select);  
		$data =  $DBConnection->fetchData($result);  
		
		// Inhalt der Seite ausgeben  
		$this->__Content = $data['PageContent'];
	}
}

?>
apps\config\core\database\sites\testwebsite\DEFAULT_connections.ini:

Code: Alles auswählen

[MySQL] 
DB.Type = "MySQLx" ; Typ des Treibers (MySQL oder SQLLite)
DB.Host = "" ; Servername oder IP-Adresse der Datenbank 
DB.User = "" ; Benutzer 
DB.Pass = "" ; Passwort 
DB.Name = "test" ; Name der Datenbank
Gruß
se2bass

Benny
Beiträge: 8
Registriert: 30.03.2010, 21:03:05

Re: Fragen zu "Erstellen einer Website"

Beitrag von Benny » 30.03.2010, 21:23:56

Hallo,

ich habe nun die ersten Schritte mit dem APF gewagt aber scheitere an der datenbank xD
ich habe meine datein angepasst das sie den hier gepostet entsprechen...es kommt aber ein fehler^^

Fatal error: Cannot redeclare class connectionManager in D:\xampp\new\xampp\htdocs\apf\apps\core\database\connectionManager.php on line 124

wüsste aber nicht wie wo und warum die mehrfach geladen/vorhanden sein sollte oder warum sonst der fehler kommt...
naja meine content_v1_controller.php sieht so aus:

Code: Alles auswählen

<?php
import('core::database', 'connectionManager');
import('tools::request', 'RequestHandler');

 class content_v1_controller extends baseController {
 
  function content_v1_controller() {
   }
   
    function transformContent() {
	  
	  $ConnectionManager = &$this ->__getServiceObject('core::database', 'ConnectionManager');
	  $db = &$ConnectionManager->getConnection('MySQL');
	 
	 
	  $page = RequestHandler::getValue('Seite', 'Startseite');
	  
	  //validieren
	  $page = $db->escapeValue($page);
	  
	  $abf = 'SELECT PageContent FROM demopage_content WHERE PageURLName = \''.$page.'\' LIMIT 1';
	  
	  $erg = $db->executeTextStatement($abf);
	  $data = $db->fetchData($erg);
	  
	  //Ausgabe
	  $this->__Content = $data['PageContent'];
	} //end function transformContent
	
 } //end class content_v1_controller
Also müsste so ungefähr ja eig. passen...oder habe ich doch schon hier einen fehler geschafft?
Oder wüsstest sonst einen grund dafür^^

Benutzeravatar
Screeze
Beiträge: 1920
Registriert: 05.08.2009, 09:49:04
Kontaktdaten:

Re: Fragen zu "Erstellen einer Website"

Beitrag von Screeze » 30.03.2010, 22:42:56

Sieht so aus als ob der connectionManager mehrfach eingebunden wird - vorrausgesetzt du hast nicht selber schon eine klasse die diesen namen trägt irgendwo in der applikation.

durch verwendung von import() sollte das aber garnicht passieren.
Welche version des APF benutzt du denn?

Ich erinnere mich an ein Problem mit der import() funktion das es mal gab..
da hat die verwendung von

Code: Alles auswählen

import('core::database', 'connectionManager');
import('core::database', 'ConnectionManager');
zu einem problem geführt, wenn z.b. das C beim 2. mal großgeschrieben wurde.
Unter windows is das grundsätzlich kein Problem, nur die routine zum prüfen ob die klasse schon eingebunden ist hat da versagt.

Und hier scheint das selbe zu passieren.
Bisher wird der noch kleingeschrieben, wie du es bei der import() funktion gemacht hast:

Code: Alles auswählen

import('core::database', 'connectionManager');
Hier lädst du ihn aber mit großem anfangsbuchstaben:

Code: Alles auswählen

$ConnectionManager = &$this ->__getServiceObject('core::database', 'ConnectionManager');
da die funktion __getServiceObject seit geraumer zeit selber auch nochmal import() aufruft, um sicherzustellen dass die klasse eingebunden ist, führt das zu oben erklärtem fehlverhalten.

Du müsstest also einfach

Code: Alles auswählen

$ConnectionManager = &$this ->__getServiceObject('core::database', 'connectionManager');
verwenden.


Allerdings soll die Klasse im kommenden Release 1.12 umbenannt werden zu ConnectionManager (grosses 'C'), um den JAVA-Coding standarts zu genügen, das ist aber noch nicht implementiert.


Ich hoffe das hilft,
Grüsse Ralf

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast