По умолчанию класс admin User
не создается во внешнем интерфейсе, поэтому здесь есть несколько вариантов.
Опция 1 : получить идентификатор пользователя admin прямо изсессия.Это проще всего сделать, если вам нужно знать только 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()
, поскольку он всегда вызывается непосредственно из сеанса браузера.
UPDATE - для полученияимя пользователя администратора через api : Если вы обращаетесь к интерфейсным контроллерам через API, Opencart создает новый сеанс, используя catalog / controller / api / login.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, поэтому вы можете приступить к созданию экземпляра пользовательского класса, как описано выше.