Интерфейс API Rest Magento 2 access из корневого файла - PullRequest
0 голосов
/ 01 мая 2018

Я создал файл сценария в корне, и я хочу создать нового клиента из этого файла ниже, мой код для этого.

use Magento\Framework\App\Bootstrap;
//use Magento\Customer\Api\Data\CustomerInterface;

require __DIR__ . '/../../app/bootstrap.php';
$bootstrap = Bootstrap::create(BP, $_SERVER);
$obj = $bootstrap->getObjectManager();

$obj->get('Magento\Framework\App\State')->setAreaCode('frontend');

$customerData = [
        'customer' => [
            'email' => 'demo@user.com',
            'firstname' => 'John',
            'lastname' => 'Wick',
           ],
        'password' => 'John123'
    ];

$customer=$obj->get('\Magento\Customer\Api\AccountManagementInterface');
$customer->createAccount($customerData);

но когда я запускаю этот код, он выдает ошибку ниже.

Неустранимая ошибка : необработанная ошибка TypeError: Аргумент 1, переданный в Magento \ Customer \ Model \ AccountManagement \ Interceptor :: createAccount (), должен быть экземпляром Magento \ Customer \ Api \ Data \ CustomerInterface, заданный массив Вызывается в C: \ wamp64 \ www \ mg \ m2 \ rest \ v3 \ Customer.php в строке 82 и определяется в C: \ wamp64 \ www \ mg \ m2 \ generate \ code \ Magento \ Customer \ Model \ AccountManagement \ Interceptor.php: 124 Трассировка стека:

0 C: \ wamp64 \ www \ mg \ m2 \ rest \ v3 \ Customer.php (82): Magento \ Customer \ Model \ AccountManagement \ Interceptor-> createAccount (Array)

1 C: \ wamp64 \ www \ mg \ m2 \ rest \ v3 \ api.php (7): require_once ('C: \ wamp64 \ www \ m ...')

2 {main}

брошено в C: \ wamp64 \ www \ mg \ m2 \ generate \ code \ Magento \ Customer \ Model \ AccountManagement \ Interceptor.php on line 124

Пожалуйста, помогите. на самом деле я хочу получить доступ к методу веб-API непосредственно из кода и получить ответ, чтобы я мог соответствующим образом изменить этот ответ. потому что у нас уже есть приложение, работающее в magento 1.9. поэтому мы не хотим менять ответ

1 Ответ

0 голосов
/ 01 мая 2018

Это похоже на сообщение об ошибке. Вы должны передать реализацию Magento\Customer\Api\Data\CustomerInterface методу createAccount.

Таким образом, вместо того, чтобы передавать простой массив, такой как $customerData, вы должны вместо этого создать новый экземпляр реализации CustomerInterface ... и заполнить его необходимыми данными.

Просматривая их репозиторий GitHub, я нашел это: Magento\Customer\Model\Data\Customer https://github.com/magento/magento2/search?utf8=%E2%9C%93&q=%22implements+Magento%5CCustomer%5CApi%5CData%5CCustomerInterface%22&type=

Так что, если вы не хотите создавать свою собственную реализацию, это то, что вы должны передать createAccount

Вы должны иметь возможность создать его через фабрику, например:

try {
    $objectManager = $bootstrap->getObjectManager();

    $objectManager->get(Magento\Framework\App\State::class)
        ->setAreaCode(\Magento\Framework\App\Area::AREA_FRONTEND);

    /** @var \Magento\Customer\Api\Data\CustomerInterfaceFactory $customerFactory */
    $customerFactory = $objectManager->create(\Magento\Customer\Api\Data\CustomerInterfaceFactory::class);
    $customer = $customerFactory->create();
    $customer
        ->setEmail('justincase@test123.xyz')
        ->setFirstname('Justin')
        ->setLastname('Case');

    /** @var \Magento\Customer\Api\AccountManagementInterface $accountManager */
    $accountManager = $objectManager->create(\Magento\Customer\Api\AccountManagementInterface::class);
    $accountManager->createAccount($customer);

} catch (Exception $e) {
    echo $e->getMessage();
}

Хорошо, так как мне было любопытно, я быстро (смеется) установил magento2 самостоятельно. В приведенном выше примере мне удалось создать клиента при новой установке magento2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...