#php #cakephp
#php #cakephp
Вопрос:
Я довольно новичок в CakePHP 3, и мне было интересно, как я мог бы этого добиться. В принципе, у меня есть пользовательский контроллер. Этот контроллер имеет несколько основных методов RESTful, и каждый из них проверяет допустимый метод запроса, прежде чем продолжить.
Например
class UsersController extends AppController
{
public function create()
{
if ($this->request->is('post') === false) {
throw new BadRequestException('This API endpoint only accepts a POST request');
return false;
}
if (empty($this->request->data) || !count($this->request->data)) {
throw new BadRequestException('No POST data received');
return false;
}
}
public function update()
{
if ($this->request->is('post') === false) {
throw new BadRequestException('This API endpoint only accepts a POST request');
return false;
}
if (empty($this->request->data) || !count($this->request->data)) {
throw new BadRequestException('No POST data received');
return false;
}
}
public function delete()
{
if ($this->request->is('post') === false) {
throw new BadRequestException('This API endpoint only accepts a POST request');
return false;
}
if (empty($this->request->data) || !count($this->request->data)) {
throw new BadRequestException('No POST data received');
return false;
}
}
}
Это выглядит довольно повторяющимся, и я думаю, что я мог бы создать промежуточное программное обеспечение, которое выполняет всю проверку запросов только для этих методов (т. Е., Если у меня есть index (), промежуточное программное обеспечение не будет применяться); однако я не уверен, как это можно сделать.
Любая помощь была бы очень признательна.
Ответ №1:
Вы можете использовать функцию инициализации контроллера для выполнения распространенных ошибок
public function initialize(){
parent::initialize();
if (!$this->request->is('post')) {
throw new BadRequestException('This API endpoint only accepts a POST request');
return false;
}
if (empty($this->request->data) || !count($this->request->data)) {
throw new BadRequestException('No POST data received');
return false;
}
}
Также вы можете указать методом, используя $this->request->params[‘action’], например
if (!$this->request->is('post') amp;amp; in_array($this->request->params['action'], ['index','add','delete'])) {
throw new BadRequestException('This API endpoint only accepts a POST request');
return false;
}
Надеюсь, это поможет вам