PrestaShop не поддерживает это из коробки. Однако вы можете сделать это с помощью модуля и передних контроллеров.
Это базовый пример этого.
1. Модуль для регистрации дружественных URL
class RestApiModule extends Module
{
public function __construct()
{
$this->name = 'restapimodule';
$this->tab = 'front_office_features';
$this->version = '1.0';
parent::__construct();
}
public function install()
{
return parent::install() && $this->registerHook('moduleRoutes');
}
public function hookModuleRoutes()
{
return [
'module-restapimodule-login' => [
'rule' => 'restapimodule/login',
'keywords' => [],
'controller' => 'login',
'params' => [
'fc' => 'module',
'module' => 'restapimodule'
]
]
];
}
}
2. Создать абстрактный REST-контроллер
Создайте абстрактный контроллер, чтобы фактические конечные точки могли расширяться от него. Создайте его в папке модуля controllers
, назовите его AbstractRestController.php
abstract class AbstractRestController extends ModuleFrontController
{
public function init()
{
parent::init();
switch ($_SERVER['REQUEST_METHOD']) {
case 'GET':
$this->processGetRequest();
break;
case 'POST':
$this->processPostRequest();
break;
case 'PATCH': // you can also separate these into their own methods
case 'PUT':
$this->processPutRequest();
break;
case 'DELETE':
$this->processDeleteRequest();
break;
default:
// throw some error or whatever
}
}
abstract protected function processGetRequest();
abstract protected function processPostRequest();
abstract protected function processPutRequest();
abstract protected function processDeleteRequest();
}
3. Создать актуальный фронт-контроллер
Создайте фронтальный контроллер в папке модуля controllers/front
и назовите его login.php
.
require_once __DIR__ . '/../AbstractRestController.php';
class RestApiModuleLoginModuleFrontController extends AbstractRestController
{
protected function processGetRequest()
{
// do something then output the result
$this->ajaxDie(json_encode([
'success' => true,
'operation' => 'get'
]));
}
protected function processPostRequest()
{
// do something then output the result
$this->ajaxDie(json_encode([
'success' => true,
'operation' => 'post'
]));
}
protected function processPutRequest()
{
// do something then output the result
$this->ajaxDie(json_encode([
'success' => true,
'operation' => 'put'
]));
}
protected function processDeleteRequest()
{
// do something then output the result
$this->ajaxDie(json_encode([
'success' => true,
'operation' => 'delete'
]));
}
}
Установите модуль, и теперь вы можете нажать http://example.com/restapimodule/login
, и в зависимости от типа запроса он будет делать все, что вы хотите, и вы получите ответ JSON.
Чтобы добавить больше конечных точек, добавьте еще одну запись module-restapimodule-endpointname
в массив hookModuleRoutes
и фронт-контроллер, который простирается от AbstractRestController
.
Если вам также нужны правильные коды ответов и т. Д., Вам придется устанавливать заголовки с собственными функциями php, так как PrestaShop afaik не имеет никаких утилит, чтобы сделать это за вас, или использовать какую-то библиотеку.
То же самое относится и к любым другим заголовкам, которые вы можете установить, например content-type
(по умолчанию это text/html
).