Измените значение свойства класса в методе A и получите доступ к обновленному значению в методе B - PullRequest
0 голосов
/ 18 февраля 2020

Я использую пользовательский PHP каркас, который в значительной степени основан на CodeIgniter.

В одном из моих файлов контроллера я установил свойство класса с именем $ orderId. После того, как пользователь заполнит форму и отправит ее, я сделаю вставку в БД и получу номер заказа. и переопределить значение свойства класса $ orderId этим номером заказа.

Затем я перенаправлю на страницу отправки, где я хочу получить доступ к этому обновленному значению свойства класса $ orderId. Эта последняя часть не работает, класс submit получает пустое значение для свойства $ orderId.

Куда я иду неправильно, пожалуйста? Основа c пример ниже. Может быть, я не могу сделать это из-за перенаправления и должен вместо этого использовать сеансовую переменную?

Спасибо!

[EDIT] Или я мог бы передать orderId в качестве 3-го параметра 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);
    }
}

1 Ответ

0 голосов
/ 19 февраля 2020

Сама проблема является фундаментальной архитектурной проблемой. stati c работает только при работе с одним экземпляром. Но поскольку вы перенаправляете, фреймворк переинициализируется. Потеря стоимости вашей собственности c. Лучший способ go сделать это - сохранить идентификатор порядка в переменной сеанса и затем прочитать эту переменную. Сеансы длятся до тех пор, пока открыто окно браузера

...