Yii Framework Forum: Zugriff auf schon erzeugte Widget-Instanz(en) - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Zugriff auf schon erzeugte Widget-Instanz(en) Rate Topic: -----

#1 User is offline   g3ck0 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 96
  • Joined: 03-June 09

Posted 03 September 2009 - 05:07 PM

hallo zusammen

und zwar sitze ich gerade an einem problem, welches auf den ersten blick etwas konfus erscheinen mag. und zwar habe ich einen code, den jemand anderer geschrieben hat. es geht dabei um einen user-counter. diesen würde ich gerne für yii portieren und online stellen. ich habe nun eine komponente geschrieben, welche ich wie folgt aufrufen kann:

<?php $this->widget('application.components.UserCounter', array('action' => 'set')); ?>


nun ist es so, dass dann ja eine instanz von UserCounter erzeugt wird. wie kann ich denn später wieder auf diese instanz zugreifen? denn dort sind noch sachen gespeichert, die ich abrufen will. mir ist schon klar, dass man das auch anders programmieren kann, nur ist der code, wie schon erwähnt, nicht von mir! zudem denke ich, dass das auch ein allgemeines problem sein kann!

mfg
armin
0

#2 User is offline   Mike 

  • Elite Member
  • PipPipPipPipPip
  • Yii
  • Group: Members
  • Posts: 3,016
  • Joined: 06-October 08
  • Location:Upper Palatinate

Posted 04 September 2009 - 03:20 AM

Widgets sind keine Instanzen, die irgendwo gehalten werden. Sie werden nur kurz beim Rendern instanziiiert und erzeugen ihre Ausgabe - fertig. Wenn du etwas anderes brauchst, kannst du z.B. über einen BaseController (von dem alle deine Controller abgeleitet sind) oder eine eigene Applikationskomponente nachdenken. Du kannst beliebig eigene Komponenten schreiben (extends CComponent) und diese in deiner Anwendungskonfiguration unter 'components' mit eigener id einbinden. Sie sind dann von überallher über Yii::app()->deinId Aufrufbar und werden automatisch beim ersten Zugriff erzeugt.
1

#3 User is offline   g3ck0 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 96
  • Joined: 03-June 09

Posted 04 September 2009 - 07:08 AM

View PostMike, on 04 September 2009 - 03:20 AM, said:

Widgets sind keine Instanzen, die irgendwo gehalten werden. Sie werden nur kurz beim Rendern instanziiiert und erzeugen ihre Ausgabe - fertig. Wenn du etwas anderes brauchst, kannst du z.B. über einen BaseController (von dem alle deine Controller abgeleitet sind) oder eine eigene Applikationskomponente nachdenken. Du kannst beliebig eigene Komponenten schreiben (extends CComponent) und diese in deiner Anwendungskonfiguration unter 'components' mit eigener id einbinden. Sie sind dann von überallher über Yii::app()->deinId Aufrufbar und werden automatisch beim ersten Zugriff erzeugt.

Gibts dafür ein Tutorial oder ein Beispiel? Denn ich denke, dass das mit den Components wohl das sinnvollste wäre!
0

#4 User is offline   Mike 

  • Elite Member
  • PipPipPipPipPip
  • Yii
  • Group: Members
  • Posts: 3,016
  • Joined: 06-October 08
  • Location:Upper Palatinate

Posted 04 September 2009 - 07:16 AM

Naja, das Grundgerüst ist ja schnell implementiert. Es kommt mehr drauf an, ob das deinen Anforderungen gerecht wird. Das einfachste Beispiel sieht so aus:

components/MeineKomponente.php
<?php
class MeineKomponente extends CComponent
{
  public $configXY='defaultwert';

  public function irgendwas()
  {
    return 'bla';
  }
}

config/main.php
'components' => array(
  ...
  'xyz' => array(
    'class'=>'MeineKomponente',
    'configXY' => 'irgenwas'
  ),


Im Code dann:

$blabla=Yii::app()->xyz->irgendwas();

1

#5 User is offline   g3ck0 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 96
  • Joined: 03-June 09

Posted 04 September 2009 - 08:52 AM

Ah, okay! Danke dir! Das ist wohl das, was ich brauche!

Wenn ich dann immer ein Yii::app()->xyz-> mache, wird ein und die selbe Instanz aufgerufen?
0

#6 User is offline   g3ck0 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 96
  • Joined: 03-June 09

Posted 04 September 2009 - 09:54 AM

Passt alles! Vielen Dank!

An dieser Stelle aber noch ein Hinweise: und zwar hat bei mir eine init-Methode gefehlt, wobei ich nicht sagen kann, warum. Hab Sie einfach deklariert, aber leer gelassen.
0

#7 User is offline   Mike 

  • Elite Member
  • PipPipPipPipPip
  • Yii
  • Group: Members
  • Posts: 3,016
  • Joined: 06-October 08
  • Location:Upper Palatinate

Posted 05 September 2009 - 06:45 AM

View Postg3ck0, on 04 September 2009 - 08:52 AM, said:

Wenn ich dann immer ein Yii::app()->xyz-> mache, wird ein und die selbe Instanz aufgerufen?


So ist es - genau wie mit allen anderen Yii-Komponenten. Komponenten werden immer erst beim ersten Zugriff darauf instanziiert (im Gegensatz z.B. zu PRADO). Außer man führt sie in der Konfig unter preload auf. Diese Komponenten werden immer instanziiert.

View Postg3ck0, on 04 September 2009 - 09:54 AM, said:

An dieser Stelle aber noch ein Hinweise: und zwar hat bei mir eine init-Methode gefehlt, wobei ich nicht sagen kann, warum. Hab Sie einfach deklariert, aber leer gelassen.


Ah, ok. Das kannst du vermeiden, indem du CApplicationComponent statt CComponent erweiterst. Die Application erwartet nämlich, dass ihre Komponenten eine init() Methode haben. Deshalb gibts in CApplicationComponent eine Defaultimplementierung dafür, die auch gleich eventuelle Behaviors registriert.
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users