[英]Change class property value in method A and access updated value in method B
我正在使用一個主要基於 CodeIgniter 的自定義 PHP 框架。
在我的一個控制器文件中,我設置了一個名為 $orderId 的類屬性。 用戶填寫完表格並提交后,我會做一個數據庫插入,獲取訂單號。 並使用該訂單號覆蓋 $orderId 類屬性值。
然后我將重定向到提交頁面,我想在其中訪問更新后的 $orderId 類屬性值。 這最后一部分不起作用,提交類為屬性 $orderId 獲取一個空白值。
請問我哪里錯了? 下面是基本示例。 也許我因為重定向而不能這樣做,應該改用會話變量?
謝謝!
[編輯] 或者我可以將 orderId 作為重定向中的第三個 URL 參數傳遞。 EG redirect('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);
}
}
這個問題本身是一個基本的架構問題。 static 僅在您使用同一實例時才有效。 但是由於您正在重定向,因此框架正在重新初始化。 失去靜態財產的價值。 執行此操作的最佳方法是將訂單 ID 存儲在會話變量中,然后讀取該變量。 只要瀏覽器窗口打開,會話就會持續
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.