Настройка службы RESTful для Backbone.js с помощью apache и windows - PullRequest
5 голосов
/ 24 февраля 2012

Я пытаюсь настроить веб-сервис RESTful на моем локальном хосте apache, чтобы он служил в качестве серверной части для моего магистрального приложения.Я попытался:

  1. Настройка WebDAV, но получить следующие сообщения об ошибках в журналах

    [Чт 23 февраля 21:46:17 2012] [ошибка] [клиент 127.0.0.1] Невозможно положить новый контент для / clusters / 19.[403, # 0], реферер: http://ideas.localhost/ [Четверг, 23 февраля 21:46:17 2012] [ошибка] [клиент 127.0.0.1] Произошла ошибка при открытии ресурса.[500, # 0], реферер: http://ideas.localhost/

  2. Использование Backbone.emulateHTTP, которое вызывает 405 method not allowed error (что, как я полагаю, вызвано заголовком X-HTTP-Method-Override: PUT, поскольку работают нормальные запросы POSTотлично

Я использую Apache 2.2.21 и PHP 5.3 для Windows 7, и ниже мой файл .htaccess. Я также использую инфраструктуру SLIM для обработки URL-маршрутизации.

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

И конфигурация виртуального хоста

<VirtualHost *:80>
    DocumentRoot "G:/sites/ideas"
    Dav On // I also had security setting set to Allow all as it's just my localhost
    ServerName ideas.localhost
    ErrorLog "logs/ideas.localhost-error.log"
    CustomLog "logs/ideas.localhost-access.log" combined
    SetEnv APPLICATION_ENV development
</VirtualHost>

Я долго пытался заставить что-то работать, поэтому любая помощь очень ценится.

1 Ответ

4 голосов
/ 27 февраля 2012

Не могу поверить, что я решил проблему менее чем через час после открытия щедрости, но эй, хо.

Проблема заключалась в том, что Slim не имеет встроенной способности обрабатывать заголовок X-HTTP-Method-Overrideиспользуется магистралью, и сообщение об ошибке не очень наглядно.Добавление следующего в конец request.php и использование режима emulateHTTP в Backbone исправило его

protected function checkForHttpMethodOverride() {
    if ( isset($this->post[self::METHOD_OVERRIDE]) ) {
        $this->method = $this->post[self::METHOD_OVERRIDE];
        unset($this->post[self::METHOD_OVERRIDE]);
        if ( $this->isPut() ) {
            $this->put = $this->post;
        }
    } else if(isset($this->headers['x-method-override'] )) {
        $this->method = $this->headers['x-method-override'];
        if ( $this->isPut() ) {
            $this->put = $this->post;
        }
    }
}

PS - я создал запрос на получение для SLIM, чтобы включить его по умолчанию,так что если вы считаете, что было бы неплохо включить это в структуру, оставьте комментарий там

...