If your app is in Cake 2, it should handle array named parameters (what 
you're trying to do with  /brand[0]:Dell/brand[1]:Apple) by itself. Just 
pass them as an actual array rather than building the url yourself, like

$this->Html->link('search', array(
'controller' => 'products',
'action' => 'search',
'brand' => array('Dell', 'Apple')
));

This will allow cake to generate the url for you. Otherwise, it will be 
escaped which is where you get the url encoded characters (%7C, etc).

If you *need* to generate it yourself for some reason, you can prevent the 
escaping by creating it with the Router and telling it not to escape:

Router::url('/products/search/brand[0]:Dell/brand[1]:Apple', array('escape' 
=> false)); 

On Tuesday, April 17, 2012 2:42:28 AM UTC-7, Owlio wrote:
>
> >That is the proper name, because PHP sees that and creates an array with 
> the values within that array. How else would you get multiple values for 
> the same group?
>
> Ahh! This makes perfect sense, to be honest, I'm not sure why I didn't 
> realise this was the case.
>
> >It sounds like the problem is that your search plugin is not expecting an 
> array.
>
> You were correct that the search plugin wasn't expecting an array (it was 
> expecting a simple value) I've altered this now to unpack the values when 
> they're passed through to my action and it works. I still have an issue 
> when selecting multiple values as the URL is formed badly - but I should be 
> able to resolve this.
>
> >Just curious, how would you expect the URL to look to search for multiple 
> brands?
>
> Now I understand this, I'd expect them to be displayed like 
> .../brand[0]:Dell/brand[1]:Apple/. Currently (now I've tweaked the plugin) 
> the values are separated with a pipe, for example /brand:Dell%7CApple but 
> as I mentioned above, this causes problems as the search plugin is taking 
> the value literally which obviously returns no results.
>
> Thanks for your help!
>
>
>
> On Monday, April 16, 2012 11:38:45 PM UTC+1, jeremyharris wrote:
>>
>> That is the proper name, because PHP sees that and creates an array with 
>> the values within that array. How else would you get multiple values for 
>> the same group?
>>
>> When you submit the form, for example, the data is populated like this:
>>
>> // $this->data
>> array(
>>   'Server' => array(
>>     'brand' => array('Dell', 'Apple')
>>   )
>> );
>>
>> It sounds like the problem is that your search plugin is not expecting an 
>> array. Perhaps you can a) modify the plugin to accept an array, or b) 
>> modify how you pass the values in the URL to choose just the first one.
>>
>> Just curious, how would you expect the URL to look to search for multiple 
>> brands?
>>
>> On Monday, April 16, 2012 4:48:04 AM UTC-7, Owlio wrote:
>>>
>>> Hi,
>>>
>>> I hope someone can shed some light on this, it's driving me crazy. I 
>>> have a multiple select list with options generated from a database. The 
>>> problem is that the select name is being set, incorrectly, as follows:
>>>
>>> name="data[Server][brand][]" 
>>>
>>> When it should be:
>>>
>>> name="data[Server][brand]"
>>>
>>> This is causing problems as when an option is selected it displays in 
>>> the URL as '.../brand[0]:Dell' which in turn throws of my search plugin as 
>>> it's expecting '.../brand:Dell'. In my view the select box code is as 
>>> follows:
>>>
>>> echo $this->Form->create('Server', array('url' => array('action' => 
>>> 'find'), $this->params['pass'])); 
>>>    echo $this->Form->input('brand', array(
>>>       'type' => 'select',
>>>       'options' => $serverBrand,
>>>       'multiple' => 'multiple',
>>> ));
>>>
>>> With the options being generated in the controller, like so:
>>>
>>> $serverBrand = Set::extract('/Server/brand', $this->Server->find('all', 
>>> array(
>>>    'fields' => array('DISTINCT Server.brand', 'Server.brand'),
>>>    'recursive' => -1
>>> )));
>>> $serverBrand = array_combine($serverBrand, $serverBrand);
>>> $this->set('serverBrand', $serverBrand);
>>>
>>> The array_combine is necessary in order for the select box to insert the 
>>> correct value in the URL, I've tried commenting this out but the above 
>>> problem still persists. I need a way to either customize the select name, 
>>> or preferably fix it. 
>>>
>>> Any help would be greatly appreciated!
>>>
>>

-- 
Our newest site for the community: CakePHP Video Tutorials 
http://tv.cakephp.org 
Check out the new CakePHP Questions site http://ask.cakephp.org and help others 
with their CakePHP related questions.


To unsubscribe from this group, send email to
[email protected] For more options, visit this group at 
http://groups.google.com/group/cake-php

Reply via email to