Вопрос по cakephp, redirect, php, cakephp-2.0 – CakePHP передает аргументы в Controller :: redirect

4

В действиях контроллера для перенаправления я использую это:

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

или это

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

И когда я передаю данные с перенаправлением, я использую это:

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

Но я не смог найти способ передать «мой аргумент» с помощью "this-redirect-array" нотации.
Я не хочу использовать это, потому что некоторые проблемы маршрутизации:

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

Мне нужно что-то вроде этого:

$this->redirect(array('controller' => 'tools', 'action' => 'index', "?myArgument=12"));
Как демонстрирует Jleagle, этоis Можно использовать понятие массива для создания стандартных строк запроса RFC 3986, но это, как правило, не очень хорошая идея. Есть ли конкретная причина, по которой вы не хотите использовать дружественную маршрутизацию Cake? Lèse majesté

Ваш Ответ

3   ответа
0

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

И Router :: connectNamed () для router.php, чтобы изменить разделитель с & quot;: & quot; на & quot; = & quot ;:

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

);

16

используя знак вопроса, например:

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

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

Но было бы лучше просто сделать, как сказал дес:

$this->redirect(array(
    'controller' => 'tools', 'action' => 'index', 'myArgument' => 12
));
Правильно, я не знал'?' может быть использован для этого.
Это было то, что мне нужно, спасибо trante
3

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

Взгляни наCakePHP Cookbook - Контроллер :: перенаправление

Доступ к параметрам запроса:

$this->request['myArgument'];
$this->request->myArgument;
$this->request->params['myArgument'];
Хорошо, это решение создаст это: & quot;tools/index/myArgument:12& Quot; Но мне нужно это: & quot;tools/index/?myArgument=12& Quot; trante
@trante Я отредактировал свой ответ, чтобы показать вам, как получить доступ к этому параметру. Не вижу смысла смешиватьCakePHP маршруты с классической строкой запроса. Есть ли какая-то конкретная причина для этого? @ Росс хороший комментарий, но вопрос дляCakePHP2 ;)
@des Потому что я не хотел менять слишком много кода маршрутизации только для одного случая :) :) trante
какая причина почему? Вы можете получить доступ к этому параметру, используя$this->params['named'], В зависимости от того, как вы передаете дополнительные параметры, зависит от URL, который выводится.More in the manual
@trante просто вы можете использовать?$this->redirect(array('controller' => 'tools', 'action' => 'index', '?' => array('variableName' => 'variableValue'))); а затем в индексе действий вы можете использовать$variableValue = $this->request->query('variableName');

Похожие вопросы