CakePHP passerende argumenten in Controller :: redirect

In controller acties om een ​​omleiding te maken gebruik ik dit:

$this->redirect(array('controller' => 'tools', 'action' => 'index'));

of dit

$this->redirect('/tools/index');

En als ik gegevens doorwissel met omleidingen gebruik ik dit:

$this->redirect('tools/index/?myArgument=12');

Maar ik kon niet vinden hoe "myargument" door "not-redirect-array" -notatie moet worden doorgegeven.
Ik wil dit niet gebruiken omdat sommige routingproblemen:

$this->redirect(array('controller' => 'tools', 'action' => 'index', "myArgument"));

Ik heb zoiets nodig als dit:

$this->redirect(array('controller' => 'tools', 'action' => 'index', "?myArgument=12"));
4
Zoals Jleagle aantoont, is het is mogelijk om het array-begrip te gebruiken om standaard RFC 3986-querystrings te maken, maar het is over het algemeen geen goed idee. Is er een bepaalde reden waarom je de vriendelijke URL-routering van Cake niet wilt gebruiken?
toegevoegd de auteur Lèse majesté, de bron

3 antwoord

Cake ondersteunt inderdaad queryargumenten met behulp van het vraagteken, zoals dit:

$this->redirect(array(
    'controller' => 'tools', 'action' => 'index', '?' => array(
        'myArgument' => 12
    )
));

http://book.cakephp.org/2.0/en/development /routing.html#reverse-routing

Maar het zou beter zijn om gewoon te doen, zoals des gezegd:

$this->redirect(array(
    'controller' => 'tools', 'action' => 'index', 'myArgument' => 12
));
16
toegevoegd
Dat was wat ik nodig had, bedankt
toegevoegd de auteur trante, de bron
Juist, ik wist niet dat '?' kan worden gebruikt om dit te doen.
toegevoegd de auteur Zbigniew, de bron

Dit zou moeten werken:

$this->redirect(array('controller' => 'tools', 'action' => 'index', 'myArgument' => 12));

Take a look at CakePHP Cookbook - Controller::redirect

Accessing request parameters:

$this->request['myArgument'];
$this->request->myArgument;
$this->request->params['myArgument'];
3
toegevoegd
Wel, die oplossing zal dit creëren: " tools/index/myArgument: 12 " Maar ik heb dit nodig: " tools/index /? MyArgument = 12 "
toegevoegd de auteur trante, de bron
@des Omdat ik niet te veel routing-code wilde wijzigen voor slechts één geval :) :)
toegevoegd de auteur trante, de bron
een reden waarom? U kunt deze parameter openen met $ this-> params ['named'] . Afhankelijk van hoe u de extra params doorgeeft, is afhankelijk van de URL die wordt uitgevoerd. Meer in de handleiding
toegevoegd de auteur Ross, de bron
@trante Ik heb mijn antwoord bewerkt om u te laten zien hoe deze parameter toegankelijk is. Ik zie geen reden om CakePHP routes te mixen met klassieke querystring. Is hier een specifieke reden voor? @Ross goede reactie, maar vraag is voor CakePHP2 ;)
toegevoegd de auteur Zbigniew, de bron
@trante eenvoudig dat u kunt gebruiken? $ this-> redirect (array ('controller' => 'tools', 'action' => 'index', '?' => array ('variableName' => 'variableValue'))); en dan in actie-index kunt u $ variableValue = $ this-> request-> query ('variableName');
toegevoegd de auteur Quy Le, de bron

Gebruik dit om door te sturen:

$this->redirect(array('controller' => 'tools', 'action' => 'index', 'myArgument' => 12));

En Router :: connectNamed() naar router.php om het scheidingsteken van ":" naar "=" te wijzigen:

Router::connectNamed(
    array('myArgument' => array('action' => 'index', 'controller' => 'tools')), array('default' => false, 'greedy' => false, 'separator' => '=')

);

0
toegevoegd