Link to home
Start Free TrialLog in
Avatar of error77
error77

asked on

Reading Variables CakePhp (assistance Needed)

Hi All,

I have a component which contains a variable and I need to read it from my controller.

Here is the code:

<?php
class FileUploadComponent extends Object {
      var $components = array('RequestHandler');
      
      function upload($data) {
            
            
            $folder = '203jfjg546650f0gf405764455887';
            
            mkdir md5($folder);
            
            
            
            $destination = 'img/uploads/'.md5($folder).'/'.$data['name'];
            if(move_uploaded_file($data['tmp_name'], $destination)) {
                  
                  return true;
            }  
            return false;
      }
}
?>

Can anyone help please?

Thanks
Avatar of NetExpert-Warszawa
NetExpert-Warszawa
Flag of Poland image

Which variable? $destination?

Make it a class property. See the code
class FileUploadComponent extends Object {
  //...

  protected $destination;

  public function upload($data) {
    //...
    $this->destination = 'img/uploads/'.md5($folder).'/'.$data['name'];
    //...
  }

  public function getDestination() {
    return $this->destination;
  }
}

// to access the variable:

$component = new FileUploadComponent();
$component->upload(...);
$variable = $component->getDestination();

Open in new window

Avatar of error77
error77

ASKER

Hi NetExpert... Couldn't get it to work but it's propably me ... I might have done something wrong.

Here is the actual component code.

Could you help me sort the code out so the variables can be accessed please?

Here is the code in full:

/***********************************/
* component
/***********************************/
<?php
class FileUploadComponent extends Object {
      var $components = array('RequestHandler');
      

      function upload($data) {
            
            
            $folder = '1223322';
            $tempdest  = 'img/uploads/';
            $random = rand(1111111111, 9999999999);
            
            mkdir($tempdest.''.$random.''.md5($folder));
            
            $fullpath = $tempdest.''.$random.''.md5($folder);
            
            
            $this->Cookie->write('rfname',$fullpath);
            
            $destination = 'img/uploads/'.$random.''.md5($folder).'/'.$data['name'];
            if(move_uploaded_file($data['tmp_name'], $destination)) {
                  
                  return true;
            }  
            return false;
      }
}
?>

Hope you can help.

Thanks

Avatar of error77

ASKER

Anyone please?
Tell me which variables you want to access please.

In general, declare each variable, you want to access, in the classes scope instead of in functions scope. If you declare them with public modifier (or without any), you will be able to access them in a $component->variable way.
Avatar of error77

ASKER

Folder and destination please.
ASKER CERTIFIED SOLUTION
Avatar of NetExpert-Warszawa
NetExpert-Warszawa
Flag of Poland image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of error77

ASKER

Can you give me a usage example so I can try it please?
Avatar of error77

ASKER

I've tried using this on the controller:

$component = new FileUploadComponent();
$test = $component->getFolder();
                  echo $test;

It shows no errors but no results either.

I'm I doing it wrong?
Notice that variables receive their values in upload method.
$component = new FileUploadComponent();
$component->upload(array('name'=>'blablabla'));
$test = $component->getFolder();
echo $test;

Open in new window

Avatar of error77

ASKER

It's perfect ... just 1 thing ... I'm getting an error .. seems like somthings broken in the component?

Notice (8): Undefined index:  tmp_name [APP/controllers/components/file_upload.php, line 21]

Any ideas pls?
Line 21 is:
$this->destination = $fullpath.'/'.$data['name'];
and 22:
if(move_uploaded_file($data['tmp_name'], $this->destination)) {

As you can see $data is an array and needs to have at least two indexes 'name' and 'tmp_name'.
$component = new FileUploadComponent();
$component->upload(array('name'=>'blablabla', 'tmp_name'=>'tmp_blabla'));
$test = $component->getFolder();
echo $test;

Open in new window

Avatar of error77

ASKER

Perfect! Thank you very much for your help!