-1

我正在使用一个主要基于 CodeIgniter 的自定义 PHP 框架。

在我的一个控制器文件中,我设置了一个名为 $orderId 的类属性。用户填写表格并提交后,我将进行数据库插入,获取订单号。并使用该订单号覆盖 $orderId 类属性值。

然后,我将重定向到要访问更新后的 $orderId 类属性值的提交页面。这最后一部分不起作用,提交类获取属性 $orderId 的空白值。

请问我哪里错了?下面的基本示例。也许由于重定向我不能这样做,应该使用会话变量来代替?

谢谢!

[编辑] 或者我可以将 orderId 作为重定向中的第三个 URL 参数传递。EGredirect('orders/submit/'.self::$orderId);在这种情况下,我会将所有self::实例转换$this->为类级别范围。

class Orders extends Controller {
    private static $orderId;

    public function __construct() {
        // assign db model
    }

    public function index() {
        if($_SERVER['REQUEST_METHOD'] == 'POST') {

            $data = [
                // form data to pass to db model
            ];

            self::$orderId = 12345; // example order no. return from db model
            if(!empty(self::$orderId)) {
                redirect('orders/submit');
            }
        }
    }

    public function submit() {
        $data = [
            'orderId' => self::$orderId
        ];
        $this->view('orders/submit', $data);
    }
}
4

1 回答 1

0

这个问题本身就是一个基本的架构问题。static 仅在您使用同一实例时才有效。但是由于您正在重定向,因此框架正在重新初始化。失去静态财产的价值。执行此操作的最佳方法是将订单 ID 存储在会话变量中,然后读取该变量。只要浏览器窗口打开,会话就会持续

于 2020-02-19T19:56:49.373 回答