cakephp在重定向后将数据传递给视图
当数据设置后出现重定向到另一页时,是否可以显示我通过cakephp在重定向后将数据传递给视图,php,cakephp,redirect,cakephp-1.3,Php,Cakephp,Redirect,Cakephp 1.3,当数据设置后出现重定向到另一页时,是否可以显示我通过$this->set()传递的数据 谢谢, EL您使用标题('Location:…')重定向?这会使浏览器启动一个新请求。触发重定向的脚本可能与处理新请求的脚本相同,但是现在有两个实例正在运行(或者第一个实例可能已经退出),并且每个实例都无法访问另一个实例的变量。您可以将数据存储在任何位置(会话、共享内存等),或者以与第一个请求相同的方式重新构建数据,或者不发出第二个请求,而是在内部重定向到另一个操作/视图。使用标题('Location:…')
$this->set()
传递的数据
谢谢,
EL您使用
标题('Location:…')重定向?这会使浏览器启动一个新请求。触发重定向的脚本可能与处理新请求的脚本相同,但是现在有两个实例正在运行(或者第一个实例可能已经退出),并且每个实例都无法访问另一个实例的变量。您可以将数据存储在任何位置(会话、共享内存等),或者以与第一个请求相同的方式重新构建数据,或者不发出第二个请求,而是在内部重定向到另一个操作/视图。使用标题('Location:…')重定向。
?这会使浏览器启动一个新请求。触发重定向的脚本可能与处理新请求的脚本相同,但是现在有两个实例正在运行(或者第一个实例可能已经退出),并且每个实例都无法访问另一个实例的变量。您可以将数据存储在任何位置(会话、共享内存等),或者以与第一个请求相同的方式重新构建数据,或者不发出第二个请求,而是在内部重定向到另一个操作/视图。最简单的方法可能是将数据存储在会话中:
$this->Session->write('key', 'value');
并在稍后阅读:
$this->Session->read('key');
最简单的方法可能是在会话中存储数据,方法是:
$this->Session->write('key', 'value');
并在稍后阅读:
$this->Session->read('key');
您可以使用上面提到的会话,但是如果不想在会话中保存数据,可以使用dispatcher对象,下面是一个示例。我觉得它很有用
$login['Login']['username'] = $username;
$login['Login']['password'] = $password;
$this->autoRender = false;
$d = new Dispatcher();
$d->dispatch(
array("controller" => "users", "action" => "login"),
array("data" => $login)
);
您可以使用上面提到的会话,但是如果不想在会话中保存数据,可以使用dispatcher对象,下面是一个示例。我觉得它很有用
$login['Login']['username'] = $username;
$login['Login']['password'] = $password;
$this->autoRender = false;
$d = new Dispatcher();
$d->dispatch(
array("controller" => "users", "action" => "login"),
array("data" => $login)
);
我知道这已经很久了,但我也有这个问题,这就是我解决它的方法。
至于cakePHP 2.3.5,Introgy提供的解决方案将不起作用,因为controller->dispatch的定义是
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
}
}
此时将呈现控制器上的ActionOnAtController视图
编辑:
我忘了添加这一点,对于要呈现的目标视图,有必要在作为$extra传递的数组中添加键“return”,然后您必须呈现目标操作的视图,因此需要进行完全正确的修改
$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');
我知道这已经很久了,但我也有这个问题,这就是我解决它的方法。
至于cakePHP 2.3.5,Introgy提供的解决方案将不起作用,因为controller->dispatch的定义是
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
}
}
此时将呈现控制器上的ActionOnAtController视图
编辑:
我忘了添加这一点,对于要呈现的目标视图,有必要在作为$extra传递的数组中添加键“return”,然后您必须呈现目标操作的视图,因此需要进行完全正确的修改
$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');
你想完成什么?不知何故,由于重定向,显示用户永远看不到的数据没有多大意义……我想在用户被重定向到的页面上显示数据,您想完成什么?不知何故,由于重定向,显示用户永远看不到的数据没有多大意义……我想在用户重定向到的页面上显示数据