Я пытаюсь включить Cross Origin Resource Sharing (CORS) для старого проекта, выполненного в Zend 1.11.6, и проблема, похоже, является исключением, возникшим при первоначальном летном тестировании. OPTIONS
запрос. Вот полный ответ на запрос HTTP OPTIONS:
Заголовки:
Access-Control-Allow-Headers: origin, x-requested-with, content-type
Access-Control-Allow-Methods: PUT, GET, POST, DELETE, OPTIONS
Access-Control-Allow-Origin: *
Content-Type: application/json
Date: Wed, 26 Nov 2014 00:38:47 GMT
Server: Apache
Transfer-Encoding: chunked
X-Cnection: close
ТЕЛО:
{
"success": false,
"data": "Exception",
"message": "Method \"optionsaction\" does not exist and was not trapped in __call()",
"request": "/authenticate",
"version": "v1",
"parameters": {
"controller": "authenticate",
"action": "options",
"module": "default"}
}
Я отследил сообщение об ошибке, чтобы Zend_Controller_Action.__call()
в library/Zend/Controller/Action.php.
Мой вопрос: где находится подходящее место для изменения структуры, чтобы разрешить этот запрос? Я в порядке с этим на контроллере на основе контроллера или всего проекта.
Также я включил CORS через .htaccess
который я вставил ниже:
Header add Access-Control-Allow-Origin "*"Header add Access-Control-Allow-Headers "origin"Header add Access-Control-Allow-Headers "x-requested-with"Header add Access-Control-Allow-Headers "content-type"Header add Access-Control-Allow-Methods "PUT"Header add Access-Control-Allow-Methods "GET"Header add Access-Control-Allow-Methods "POST"Header add Access-Control-Allow-Methods "DELETE"Header add Access-Control-Allow-Methods "OPTIONS"
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
Вот мое действие опций проверки подлинности контроллера:
public function optionsAction()
{
$this->view->data = Array();
$this->view->success = true;
}
Взгляните на Zend_Rest_Route :: match (), вам нужно научить / расширить его, чтобы отобразить метод OPTIONS на optionsAction () в вашем контроллере.
Других решений пока нет …