По умолчанию класс администратора User
не создается во внешнем интерфейсе, поэтому здесь есть несколько вариантов.
Вариант 1. Получите user_id администратора непосредственно из сеанса. Это проще всего сделать, если вам нужно знать только user_id
и/или если человек является зарегистрированным пользователем с правами администратора. user_id
администратора хранится как переменная сеанса и глобально доступна как $this->session->data['user_id']
. Конечно, он может не существовать, поэтому вам нужно будет проверить.
if (isset($this->session->data['user_id'])) {
$user_id = $this->session->data['user_id'];
}
Вариант 2. На самом деле вы просили получить имя пользователя. Для этого вам нужно создать экземпляр класса User
и передать объект $registry
в качестве аргумента конструктору. Если вы используете PHP 5.4 или выше, вы можете сделать это и вызвать его методы напрямую, заключив вновь созданный объект в круглые скобки, как показано здесь:
$username = (new Cart\User($this->registry))->getUsername();
В более ранних версиях PHP вы можете создать экземпляр класса традиционным способом и вызвать его методы:
$this->user = new Cart\User($this->registry);
$username = $this->user->getUsername();
$user_id = $this->user->getId();
$user_group = $this->user->getGroupId();
Вы можете сделать это «на лету» в любом месте контроллера или модели, но если вы считаете, что вам потребуется частый доступ к методам User
во внешнем интерфейсе, лучшее место — в catalog/controller/startup/startup.php
и зарегистрируйте его в классе registry
, что сделает его глобальным. доступный:
$this->registry->set('user', new Cart\User($this->registry));
Затем вы можете вызвать его в любое время и в любом месте в интерфейсе магазина, например:
$this->user->getUsername();
Одно очень важное предостережение здесь относится к вашему желанию получить эти данные с помощью метода addOrderHistory()
, как указано в вашем вопросе. Вы должны иметь в виду, что этот метод может вызываться как часть обратного вызова рядом способов оплаты, таких как, например, Paypal Standard. В этом случае метод не вызывается сеансом браузера клиента, и поэтому, даже если извлекается администратор, он не сможет получить доступ к сеансу администратора. . Если вам абсолютно необходимо получить данные об администраторе, который выполняет проверку, вам нужно сделать это в методе addOrder()
, так как он всегда вызывается непосредственно из сеанса браузера.
ОБНОВЛЕНИЕ — для получения имени администратора через api: если вы получаете доступ к интерфейсным контроллерам через API, Opencart создает новый сеанс, используя catalog/controller/api/ логин.php. Поскольку этот сеанс API ничего не знает о вашем сеансе администратора по умолчанию, вам нужно добавить туда свой user_id
, чтобы описанные выше методы работали. Посмотрите на этот файл, и вы увидите строку, которая выглядит следующим образом (которая запускает сеанс API):
$this->session->start('api', $session_id_new);
Вам нужно будет изменить вещи, чтобы захватить ваш идентификатор пользователя. Что-то вроде этого:
// store user_id from admin session
$user_id = $this->session->data['user_id'];
// start the api session
this->session->start('api', $session_id_new);
// add admin user_id to your api session
$this->session->data['user_id'] = $user_id;
Теперь ваш администратор user_id является частью сеанса API, поэтому вы можете приступить к созданию экземпляра класса пользователя, как описано выше.
person
billynoah
schedule
05.12.2018