Можно ли отображать данные, которые я передаю с $this->set()
, когда есть перенаправление на другую страницу после настройки данных?cakephp передача данных для просмотра после перенаправления
Спасибо, EL
Можно ли отображать данные, которые я передаю с $this->set()
, когда есть перенаправление на другую страницу после настройки данных?cakephp передача данных для просмотра после перенаправления
Спасибо, EL
Вероятно, самый простой способ для хранения данных в сессии с:
$this->Session->write('key', 'value');
и читать его позже:
$this->Session->read('key');
Вы перенаправлять с header('Location: ...')
? Это заставляет браузер запускать новый запрос. Сценарий, вызвавший перенаправление, может быть таким же, как тот, который обрабатывает новый запрос, но теперь есть два экземпляра (или первый может даже выйти), и каждый из них не имеет доступа к переменным другого. Либо вы храните данные в любом месте (сеанс, разделяемая память, ...) или перестраиваете его так же, как и в первом запросе, или просто не выдаете второй запрос, а перенаправляете на другое действие/просмотр внутри.
Вы можете использовать сеанс, как указано выше, но если вы не хотите сохранять данные в сеансе, который может использовать объект диспетчера, вот пример. Я считаю, это полезно ..
$login['Login']['username'] = $username;
$login['Login']['password'] = $password;
$this->autoRender = false;
$d = new Dispatcher();
$d->dispatch(
array("controller" => "users", "action" => "login"),
array("data" => $login)
);
+1 для уникальной альтернативы. – RabidFire
Я знаю, что это было looong время, но я также имел эту проблему и это, как я решить. Что касается CakePHP 2.3.5 решения предоставленного Introgy не будет работать, так как определение для контроллер-> отправка
public function dispatch(CakeRequest $request,
CakeResponse $response, $additionalParams = array())
вместо этого вы можете использовать
$this->requestAction
Как объяснение в коде сказала
/**
* Calls a controller's method from any location. Can be used to connect
*controllers together
* or tie plugins into a main application. requestAction can be used to
*return rendered views
* or fetch the return value from controller actions.
*
* Under the hood this method uses Router::reverse() to convert the $url
*parameter into a string
* URL. You should use URL formats that are compatible with
*Router::reverse()
*
* #### Passing POST and GET data
*
* POST and GET data can be simulated in requestAction. Use
*`$extra['url']` for
* GET data. The `$extra['data']` parameter allows POST data simulation.
*
* @param string|array $url String or array-based URL. Unlike other URL
*arrays in CakePHP, this
* URL will not automatically handle passed and named arguments in the
*$url parameter.
* @param array $extra if array includes the key "return" it sets
*theAutoRender to true. Can
* also be used to submit GET/POST data, and named/passed arguments.
* @return mixed Boolean true or false on success/failure, or contents
* of rendered action if 'return' is set in $extra.
*/
так Introgy примером может быть изменен:
$login['Login']['username'] = $username;
$login['Login']['password'] = $password;
$url = array('plugin' => 'plug_in_if_there_is',
'controller' =>'your_target_controllers',
'action' =>'actionOnThatController');
$this->requestAction($url, array('data' => $login));
Ваши данные будут доступны в данных цели:
class YourTargetControllerController extends PlugInIfThereIsAppController
{
public function actionOnThatController()
{
$this->data; //will be having ['Login']['username'] = $username
// ['password'] = $password
}
}
и вид на actionOnThatController будет оказана.
EDIT: Я забыл добавить это для целевого вида, оказываемых необходимо добавить ключ «возвращение» в массиве передается как $ дополнительные, то вы должны вынести мнение Целенаправленных действий, в поэтому полная правильная модификация будет
$login['Login']['username'] = $username;
$login['Login']['password'] = $password;
$url = array('plugin' => 'plug_in_if_there_is',
'controller' =>'your_target_controllers',
'action' =>'actionOnThatController');
$this->requestAction($url, array('return', 'data' => $login));
$this->render('PlugInIfThereIs.YourTargetControllers/action_on_that_controller');
Что вы пытаетесь выполнить? Каким-то образом не имеет смысла отображать данные, которые пользователь никогда не увидит из-за перенаправления ... – dhofstet
Я хочу отобразить данные на странице, на которые пользователь перенаправляется на – Elwhis