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 [email protected]
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
-~----------~----~----~----~------~----~------~--~---