php - 使用数据代码点火器 4 路由/重定向到同一控制器的索引
问题描述
我想将路由重定向到同一控制器的索引。我的场景是在数据库中存储数据之后我想显示消息。现在我尝试使用FlashData
类似:
$this->session->setFlashdata('errmsg', json_encode(array('errstatus' => 'true' , 'msg' => $errorstring)));
所以我尝试访问视图中的数据,例如:
<?php print_r($this->session->getFlashdata("errmsg"))?>
但它失败了,因为会话变量不存在。我重定向到同一个控制器的方式是:
return redirect()->to('/register');
现在我被困在向这个重定向发送数据。我可以这样做return view('pages/register', $this->session->get());
,但它只是一种解决方法,因为如果我这样做,url 仍然具有方法存储,并且每次加载时都会显示错误消息。
解决方案
我设置了一个小测试来玩这个......
我创建了一个控制器(主页)来设置一个 flashData 值,并链接到另一个控制器(页面),该控制器设置第二个 flashData 值并尝试显示它们。
家庭控制器 (app\Controllers\Home.php)
class Home extends BaseController
{
protected $session;
public function __construct() {
$this->session = \Config\Services::session();
}
public function index()
{
$this->session->setFlashdata('errmsg_1','Error Message 1');
echo '<a href="page">Click here to View the Flash Data</a><br>';
}
}
页面控制器 (app\Controllers\Page.php)
class Page extends BaseController {
protected $session;
public function __construct() {
$this->session = \Config\Services::session();
}
public function index() {
echo __LINE__ . ' ' . __CLASS__ . ' ' . __METHOD__;
$this->session->setFlashdata('errmsg_2','Error Message 2');
return redirect()->to('/page/register');
}
public function register() {
echo __LINE__ . ' ' . __CLASS__ . ' ' . __METHOD__;
$page['error_message_1'] = $this->session->getFlashdata('errmsg_1');
$page['error_message_2'] = $this->session->getFlashdata('errmsg_2');
echo view('page_view', $page);
}
}
和视图 (app\Views\page_view.php)
<?php
/**
* @var string $error_message_1
* @var string $error_message_2
*/
echo '<br>';
echo 'Error 1 :';
echo ($error_message_1) ? $error_message_1 : 'I am Null'; // Expect this to be NULL?
echo '<br>';
echo 'Error 2 :';
echo ($error_message_2) ? $error_message_2 : 'I am Null'; // This should appear
echo '<br><a href="/home">Go Back Home</a><br>';
因此,Home Controller 为“errmsg_1”加载了 FlashData,并带有一个链接以将我们带到 Page Controller。
一旦到达页面控制器,索引就会设置一个额外的 errmsg_2 并执行重定向到 register 方法。
因此,在单击 Home Controller 中的链接后,我们到达了页面控制器,它显示...
17 App\Controllers\Page App\Controllers\Page::register
Error 1 :I am Null
Error 2 :Error Message 2
Go Back Home
在页面控制器上执行刷新时,我们得到......
17 App\Controllers\Page App\Controllers\Page::register
Error 1 :I am Null
Error 2 :I am Null
Go Back Home
所以重定向确实可以使用 flashData。
唯一的缺点是您必须将 flashdata 值作为变量传递到视图中才能显示它。
推荐阅读
- python - Tensorflow 输入维度不匹配问题
- python - 如何从 Heroku 应用程序下载最新更改的源代码和文件?
- vue.js - 错误 SSR _vm.formInstance.getFormData 不是函数
- php - Laravel Sail 不会在 Ubuntu 20.04 上构建 - groupadd:无效的组 ID 'sail'
- python - 如何使用正则表达式获取使用 boto3 的 s3 对象列表?
- javascript - HTML 中的 HTTP 安全标头
- c++ - 防止在静态库中隐式实例化 std::string/std::wstring
- javascript - 更改 sidenav 视图
- vue.js - 在 vue 中使用 d3.js
- php - 如何为返回空结果的现有单行输出查询