Seite 1 von 1

Frage zur Url Upgrade

Verfasst: Di 19. Sep 2017, 13:54
von derju
Hallo zusammen,

wie kann ich das verstehen?
url – [Auth classes] Use same method from session object.


LG - derJu

Re: Frage zur Url Upgrade

Verfasst: Mo 27. Nov 2017, 15:05
von rethus
Ja, ist für wahr etwas spartanisch gehalten die Info im "Code Analyzer".

Also Auth/Contenido_Auth::url wurde in 4.9 überarbeitet, so das keine Methode "url" mehr im AUTH-Objekt vorhanden ist.

Da die ehemalige "URL-Methode" keinen Parameter benötigte, aber die cSession->url() einen Parameter benötigt, ist das etwas verwirrend.

An folgendem Beispiel kannst du sehen, wie du es ersetzen kannst. Natürlich musst du immer sehen, in welchem Context die Methode genutzt wird, denn der CodeAnalyzer schlägt auch irrtümlich bei sehr vielen anderen "url()"-Methoden im Sourcecode an, die nicht ersetzt werden müssten.

Code: Alles auswählen

 $PHP_SELF = $auth->url()."&";

Code: Alles auswählen

 $PHP_SELF = $sess->url($selfURL);
Zu achten ist darauf, dass das session-Objekt in dem Kontext existiert. Eigentlich sollte es von Contenido als $sess geladen werden.

Arbeitet man in einer Funktion, müsste dies ggf. mit _code]global $sess;[/code] Zugriff auf den Global-Scope gewährt werden, das Objekt als Parameter an in die Funktion übergeben, oder via

Code: Alles auswählen

$sess = new cSession();
neu instantiiert werden.

Der an "url" zu übergebende Parameter ist eine URL. Zuvor wurde im "alten" auth-Objekt die "PHP_SELF" schon in das Objekt gespeichert, weshalb es nicht nötig war, diese anzugeben, wenn es die aktuelle URL ist. Nun ist es aber notwendig, und man kann dazu auf die in 4.9.x verfügbare $selfURL zugreifen (war zuvor cSession::self_url)

Re: Frage zur Url Upgrade

Verfasst: Mo 27. Nov 2017, 21:13
von Oldperl
Servus,
rethus hat geschrieben:
Mo 27. Nov 2017, 15:05
Arbeitet man in einer Funktion, müsste dies ggf. mit _code]global $sess;[/code] Zugriff auf den Global-Scope gewährt werden, das Objekt als Parameter an in die Funktion übergeben, oder via

Code: Alles auswählen

$sess = new cSession();
neu instantiiert werden.
Bitte keine global-Definitionen oder ähnliches. CONTENIDO 4.9 hat eine Registry-Klasse, die genau für solche Fälle vorhanden ist. Mit Hilfe dieser Klasse kann man dann auch ganz einfach das aktuelle Session-Objekt bekommen.

Code: Alles auswählen

$sess = cRegistry::getSession();
Auch die Session-ID kann man entsprechend abfragen, wobei ich persönlich auf dafür eine entsprechende Methode, anstelle eines direkten Zugriffs auf eine Klassenvariable, bevorzugt hätte.

Code: Alles auswählen

$sessId = cRegistry::getSession()->id;
Auch für viele andere Objekte oder globale Variable hält die cRegistry entsprechende Zugriffs-Methoden vor. Einfach mal in die Doku schauen.

Gruß aus Franken

Ortwin