Kein Zugriff auf Context

Das Forum ist für das Melden von Bugs gedacht. // This forum is intended to report bugs with the APF.
Gesperrt
Thalo
Beiträge: 244
Registriert: 10.08.2009, 16:56:52

Kein Zugriff auf Context

Beitrag von Thalo » 07.01.2011, 04:23:04

Hi,

ist das gewollt, dass ich trotz

Code: Alles auswählen

$page = new Page();
$page->setContext('blah');
in von APFObject geerbten Objekten nur einen leeren Context bekomme? Ein

Code: Alles auswählen

$this->getContext();
ist jedesmal ohne Wert und

Code: Alles auswählen

$this->__getServiceObject('','');
findet bei mir nie die Konfigurationsfiles wegen fehlendem Context :roll:

Mach ich was falsch oder ist das ein Bug?

Ausserdem habe ich noch ein Problem mit dem ConnectionManager. Beim MySQLi Treiber werden mir merkwürdigerweise keine Fehler angezeigt. Tausche ich den MySQLi gegen den MySQL Treiber aus, bekomme ich auch wieder Fehler angezeigt. :?

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

Re: Kein Zugriff auf Context

Beitrag von dr.e. » 07.01.2011, 10:05:48

Hallo Thalo,

theoretisch wird der Context in jedem Objekt, das von APFObject erbt propagiert. Das ist jedoch an die Bedingung geknüpft, dass jedes dieser Objekte über APF-Mechanismen (Page-Controller, ServiceManager, DIServiceManager) erzeugt wird. Wird die Kette irgendwo dazwischen unterbrochen, fehlt der Context. Sollte das in einem der genannten Mechanismen passieren, ist das ein Bug.

In welcher Konstellation tritt denn dieser Fehler auf?
Ausserdem habe ich noch ein Problem mit dem ConnectionManager. Beim MySQLi Treiber werden mir merkwürdigerweise keine Fehler angezeigt. Tausche ich den MySQLi gegen den MySQL Treiber aus, bekomme ich auch wieder Fehler angezeigt. :?
Wie sieht denn der Code dazu aus? Welche Version des APF nutzt du?
Viele Grüße,
Christian

Thalo
Beiträge: 244
Registriert: 10.08.2009, 16:56:52

Re: Kein Zugriff auf Context

Beitrag von Thalo » 07.01.2011, 14:57:14

Hi Doc,

danke für deine schnelle Rückmeldung.
theoretisch wird der Context in jedem Objekt, das von APFObject erbt propagiert. Das ist jedoch an die Bedingung geknüpft, dass jedes dieser Objekte über APF-Mechanismen (Page-Controller, ServiceManager, DIServiceManager) erzeugt wird. Wird die Kette irgendwo dazwischen unterbrochen, fehlt der Context. Sollte das in einem der genannten Mechanismen passieren, ist das ein Bug.

In welcher Konstellation tritt denn dieser Fehler auf?
War wohl gestern schon zu spät, hab den Fehler gefunden :)

Wie sieht denn der Code dazu aus? Welche Version des APF nutzt du?
Version: Experimental: APF 1.13-RC1

Es war vorerst nur ein Test daher gibts noch keinen wirklichen Code..

Code: Alles auswählen

class SimpleTestMapper extends APFObject {
    public function doSomeStuff() {
        $connectionManager = $this->__getServiceObject('core::database', 'ConnectionManager');
        $connectionManager->getConnection('connection');
        $connection->executeTextStatement('SELECT 1 FROM  testtable');

    }
}
Hier würde MySQLi nun stillschweigen und MySQL (wie erwartet) melden, dass die Tabelle nicht existiert.

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

Re: Kein Zugriff auf Context

Beitrag von dr.e. » 07.01.2011, 16:00:04

Hi Thalo,
War wohl gestern schon zu spät, hab den Fehler gefunden :)
Dannn ist ja alles gut. :)
Hier würde MySQLi nun stillschweigen und MySQL (wie erwartet) melden, dass die Tabelle nicht existiert.
... was nicht der erste Unterschied zwischen der MySQLi- und MySQL-Extension von PHP wäre. Ich habe mir die Implementierung angesehen und diese scheint mir für beide Methoden sauber zu sein. Warum

Code: Alles auswählen

!empty($this->__dbConn->error) || !empty($this->__dbConn->errno)
kein true liefert ist mir schleierhaft. Ich schau mir das aber am Wochenende nochmal in Ruhe an und versuche das herauszufinden. Melde mich hier wieder.
Viele Grüße,
Christian

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

Re: Kein Zugriff auf Context

Beitrag von dr.e. » 07.01.2011, 20:09:33

Hallo Thalo,

das Verhalten des MySQLiHandler ist definitiv ein Bug. Innerhalb von empty() wird der Zugriff auf die öffnetliche Variable error bzw. errno der MySQLi-Connection nicht evaluiert. Das Verhalten ist mir für Methoden klar, nicht aber für Variablen, denn lt. Doku sollte der Zugriff auf Variablen aller Art funktionieren.

Ich habe das jedoch mit einem Workaround gelöst, in dem die Inhalte zuerst direkt ausgelesen und dann evaluiert werden. Mit Commit #1184 wirft der MySQLiHandler nun auch eine Exception.

Vielen Dank für den Hinweis! :)
Viele Grüße,
Christian

Thalo
Beiträge: 244
Registriert: 10.08.2009, 16:56:52

Re: Kein Zugriff auf Context

Beitrag von Thalo » 07.01.2011, 20:37:47

Hi Doc,
dr.e. hat geschrieben:Hallo Thalo,
das Verhalten des MySQLiHandler ist definitiv ein Bug. Innerhalb von empty() wird der Zugriff auf die öffnetliche Variable error bzw. errno der MySQLi-Connection nicht evaluiert. Das Verhalten ist mir für Methoden klar, nicht aber für Variablen, denn lt. Doku sollte der Zugriff auf Variablen aller Art funktionieren.
Warum ist das für Methoden klar? Könntest du mir den Auszug aus der Doku dazu posten? :)

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

Re: Kein Zugriff auf Context

Beitrag von dr.e. » 08.01.2011, 01:22:30

Hi Thalo,

ich zittiere http://de2.php.net/empty:
Note:

empty() only checks variables as anything else will result in a parse error. In other words, the following will not work: empty(trim($name)).
Damit ist klar, dass ein

Code: Alles auswählen

$foo->getBar()
nicht funktionieren sollte. Laut user contributes notes (siehe http://de2.php.net/manual/en/function.empty.php#93117) sind Objekt-Attribute aber zulässig. In diesem Fall funktioniert ein
$this->__dbConn->error
aber offensichtlich genauso wenig. Warum erschließt sich mir zwar nicht, aber nunja. :roll:
Viele Grüße,
Christian

Thalo
Beiträge: 244
Registriert: 10.08.2009, 16:56:52

Re: Kein Zugriff auf Context

Beitrag von Thalo » 10.01.2011, 04:01:57

Hi,
aber offensichtlich genauso wenig. Warum erschließt sich mir zwar nicht, aber nunja. :roll:
Schleierhaft, dass PHP hier differenziert. Müsst man mal in die Sourcen schauen, eventuell ein Bug? Wenn nicht, sollte das jedenfalls mit in die Doku. :)

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

Re: Kein Zugriff auf Context

Beitrag von dr.e. » 10.01.2011, 11:29:17

Hallo Thalo,

ich habe in den user contributed notes keinen Hinweis darauf gefunden, dass es nicht gehen sollte. Bugs sind dazu auch keine vorhanden - es sei denn ich habe einen übersehen. Werde bei Gelegenheit noch eine user contributed note anlegen, damit dieser Fall wenigstens dort auftaucht.
Viele Grüße,
Christian

Gesperrt

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast