1,105,288 Community Members

Cakephp Y U NO GET!?!?!?

Member Avatar
soapyillusion
Junior Poster in Training
88 posts since Dec 2009
Reputation Points: 0 [?]
Q&As Helped to Solve: 6 [?]
Skill Endorsements: 0 [?]
 
0
 

Hello everyone, I am once agian running into a problem with something that's normally simple, yet lovely cakePHP has to make all so very hard.

I'm once agian tasked with improoving the bookmarking application on our website. This time I am suppose to have the url save the date: start & stop parameters within the url and use the url save mechanics of my bookmark tool. However cakephp isnt making this easy.

I tried using $this->request->query['action']; as well as $this->request['action']; even $this->params['action']; but none of this works. Any ideas on how to make this work using cakephp 2.3?

thanks!

Member Avatar
veedeoo
Veteran Poster
1,008 posts since Oct 2011
Reputation Points: 314 [?]
Q&As Helped to Solve: 164 [?]
Skill Endorsements: 17 [?]
 
0
 

did you try $this->request['param']; as suggested here?

I really don't understand why? cake php would deprecate such a useful function like the array access

$this->request['url']['param']
Member Avatar
soapyillusion
Junior Poster in Training
88 posts since Dec 2009
Reputation Points: 0 [?]
Q&As Helped to Solve: 6 [?]
Skill Endorsements: 0 [?]
 
0
 

Ok so I was able to get url to pass to the controller using $this->params->query['param'] however, cakephp still tells me the variable is undefined, despite the fact I'm clearly printing it to the page... which is also preventing me from passing the variable to the view...

Member Avatar
veedeoo
Veteran Poster
1,008 posts since Oct 2011
Reputation Points: 314 [?]
Q&As Helped to Solve: 164 [?]
Skill Endorsements: 17 [?]
 
1
 

When sending data from logic side to the view side, we can safely assumed that pretty much all frameworks and templating engines have identical coding convention, .

Like smarty, dwoo, twig just to name a few, the data are passed in this convention

$this->FrameWork_method('string_variable', $value_of_string_variable_from_anywhere');

So, for our Cake it can be something like this in the controller

$this->set('url',$this->request['param']);

The 'set' method made the string variable available for view's disposal. To display the url on the view, it can be coded as simple as this

    <!-- Here is the code for the url -->

    Url: <?php echo $url ?> 
Member Avatar
soapyillusion
Junior Poster in Training
88 posts since Dec 2009
Reputation Points: 0 [?]
Q&As Helped to Solve: 6 [?]
Skill Endorsements: 0 [?]
 
0
 

I've been doing that and sadly once the focus is switched from the controller to the view the values set to those variables vannish. However the indexes in the array are allowed to stay....

Makes no sense to me O_O, I'm assuming it has to do with something set up in the config.php by the admin, but I honestly just don't know. (Never encountered this problem before with passing hardcoded variables or even ones transfered from an ajax call.

Member Avatar
veedeoo
Veteran Poster
1,008 posts since Oct 2011
Reputation Points: 314 [?]
Q&As Helped to Solve: 164 [?]
Skill Endorsements: 17 [?]
 
1
 

How did they set-up the indexes in the array? You might be able to add it there..

I believe CakePHP allows this type of data assignment.

$this_Data = array(

            'string_var1' => $value,
            'string_var2' => $value_two,
            'string_var3' => $value_three,
            'url'   => $this->request['param']
            );

   $this->set($this_data);

If you can add the url data in the array, you can easily follow the existing reiteration in the view side to display the url.

I understand your situation. Sometimes previous coders or "ADMIN and BOSS" would do a pretty lazy approach.. something like this.

$this->set($some_function_or_method_here());

## or a hard coded const from the model file
$this->set(model::var_string());

## common practice they don't even make a comment on where the method is coming from. 

I hate it when people do that, because it will be difficult to reference variable values on the view.

You can also try looking at your application model file.. look for something like this

class Name_Of_Your_Application extends AppModel{

 public $YourApplicationVar = array(
    'Something' => array(
        's_var1'  => 'SomethingHere',
        's_var2' => 'somethingHere_again',
        ## watch out for array like this
        's_array' = array('s_array1'=>'s_array1_value', 's_array2' => 's_array2_value' )
    )
);
}
Member Avatar
soapyillusion
Junior Poster in Training
88 posts since Dec 2009
Reputation Points: 0 [?]
Q&As Helped to Solve: 6 [?]
Skill Endorsements: 0 [?]
 
1
 

Ok so after much struggle I was finally able to get the whole bookmark system to work. Keep mind this is normally would've of been a simple task. However I had an added handicap of using the jquery tabs too. So I feel its important I post how to do to this using it below.

First thing to note is when working with the tabs your url bar will not change from the outset. So the document.window function in javascript becomes all but useless for any page that uses it. Also note with Cakephp alot of built in encryption securty is used therefore any call make by ajax generally goes encrypted. Therefore making the use of a request_uri also very hard. You could use 'get' instead of 'post' but you will still run into problems pulling out the correct callback. (if you have a ton of callbacks going from a single event listener)

I came to the conclusion the best way to make this work is to "force" a url to be used that matches your specs. You can do this using session variables and the religous use of the app_controller. Add all your funcationality for the 'url reader' into the app_controller in your before filter this way, the url is read before the jgrid has the ability to troll with your url bar.

Now there is more to if that is if your using jqgrid but i suspect most people wont wanna go this far. If you wanna know more you can msg me asking me for help!

Question Answered as of 1 Year Ago by veedeoo
You
This question has already been solved: Start a new discussion instead
Post:
Start New Discussion
Tags Related to this Article