Aaaah. I still have a problem.  I can't seem to use components in my
sub-classed component. For example, if I have the following:

class RedComponent extends ColorComponent
{
        var $components = array('Session', 'Flickr');
      ...
}

I get the folloiwng error when I reference the component from
RedComponent, either as $this->Flickr, or $this->controller->Flickr.

   Notice (8): Undefined property:  RedComponent::$Flickr [APP
\controllers\components\red.php, line 30]

If I define the component in the ColorComponent class, then I can
reference it using $this->controller->Flickr, but NOT $this->Flickr.

what am I doing wrong???



On Apr 26, 7:06 pm, mixersoft <[EMAIL PROTECTED]> wrote:
> I think I have it worked out.
>
> The following example allows me to load sub-classed Components on the
> fly and use them as if they were a "parent class" instance. Note that
> components are loaded in the controller through this static command:
>
>                 ColorComponent::create($this, 'Red');
>
> and are referenced in the controller as: $this->Color
>
> There might be a more elegant way to do this, but it's good enough for
> now.  I hope this is of help to others.
>
> m.
> ---
>
> <?php
> // file: /app/controllers/components/color.php
>
> class ColorComponent extends Object
> {
>         var $components = array('Session');
>         var $controller;
>         var $name='Color';
>
>         function startup(& $controller) {
>                 $this->controller = $controller;
>                 $controller->Color = $this;
> //              debug("Color startup, controller=".print_r($this->controller-
>
> >name, true));
>
>         }
>
>         static function create(& $controller, $color) {
>                 switch ($color) {
>                         case 'Red':
>                                 App::import('Component','Red');
>                                 $controller->Color = new RedComponent();
>                                 break;
>                         case 'Blue':
>                                 App::import('Component','Blue');
>                                 $controller->Color = new BlueComponent();
>                                 break;
>                 }
>                 $controller->Color->startup($controller);
>         }
>
>         function getColor() {
>                 return $this->controller->Session->read('Color');
>         }
>         function setColor() {
>                 debug("controller=".print_r($this->controller->name, true));
>                 $this->controller->Session->write('Color',$this->name);
>         }
>
> }
>
> ?>
>
> <?php
> // file: /app/controllers/components/red.php
>
> class RedComponent extends ColorComponent
> {
>         var $components = array('Session');
>         var $controller;
>         var $name='Red';
>         var $init;
>
>         function startup(& $controller) {
>                 parent::startup($controller);
>                 $this->init = $this->name;
>         }}
>
> ?>
>
> <?php
>
> // file: /app/controllers/components/blue.php
>
> class BlueComponent extends ColorComponent
> {
>         var $components = array('Session');
>         var $controller;
>         var $name='Blue';
>
>         function startup(&$controller) {
>                 parent::startup($controller);
>                 $this->init = $this->name;
>         }}
>
> ?>
>
> <?php
> // file: /app/controllers/colors_controllers.php
>
> class ColorsController extends AppController {
>         var $name = 'Colors';
>         var $components = array('Color');
>         var $uses = null;
>         var $othAuthRestrictions = null;
>
>         function testRed() {
>                 ColorComponent::create($this, 'Red');
>                 $this->Color->setColor();
>                 debug($this->Color->getColor());
>                 exit;
>         }
>
>         function testBlue() {
>                 ColorComponent::create($this, 'Blue');
>                 $this->Color->setColor();
>                 debug($this->Color->getColor());
>                 exit;
>         }
>
> }
>
> ?>
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"CakePHP" group.
To post to this group, send email to cake-php@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/cake-php?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to