2013-12-10 136 views
5

我已在我的本地服務器上安裝了Restler以測試併爲我的項目製作一些API。Restler總是返回404:未找到

Api請求通過http://localhost/myproject/api/處理。

的問題是,每當我提出一個要求,我得到以下錯誤:

{ 
    "error": { 
     "code": 404, 
     "message": "Not Found" 
    }, 
    "debug": { 
     "source": "Routes.php:383 at route stage", 
     "stages": { 
      "success": [ 
       "get" 
      ], 
      "failure": [ 
       "route", 
       "negotiate", 
       "message" 
      ] 
     } 
    } 
} 

而且這是我.htaccess

RewriteEngine on 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^api(.*)$ /myproject/api/api.php [QSA,L] 

這是什麼api.php的樣子:

namespace myproject; 

use Luracast\Restler\Restler; 

require_once($_SERVER["DOCUMENT_ROOT"]."/myproject/resources/engine/settings.php"); 
require_once(Settings\Path\Absolute::$library."/restler/vendor/restler.php"); 

$restler = new Restler(); 
$restler->addAPIClass("myproject\\User"); 
$restler->handle(); 

我想這裏有一些misconfigura周圍,​​但我真的不明白什麼是錯的。

(我也嘗試#2的一些解決方案,但他們似乎並沒有爲我工作)

編輯:

我嘗試使用以下路徑http://localhost/myproject/resources/engine/library/restler/public/examples到達例子,他們正在,所以我想它與Restler本身的配置有關,因爲它似乎不適用於http://localhost/myproject/api

此外,我還試着在http://localhost/myproject/api/explorer中複製Restler Explorer,並且我不斷收到錯誤:404 : Not Found ../resources.json可能是因爲我沒有在我的項目的根文件夾中安裝Restler。我該如何將Restler安裝在不同的子文件夾中?

編輯2: 我剛搬到下面的類到例如001文件夾:

class User { 

    function data() { 

     return "HELLO!"; 
    } 
} 

,並加入這一行的例子的index.php內:

$r->addAPIClass('User'); 

,如果我嘗試以.../_001_helloworld/index.php/say/hello運行示例它沒有問題,但如果我嘗試_001_helloworld/index.php/user/data它不是。

在這一點上,我已經失去了所有的希望,我真的需要幫助「原因我真的失去了一些東西,但真的無法猜測:(HELP!

回答

2

這裏是你如何調試和找到什麼是錯,

  • 刪除在api.php命名空間,這是不需要的,會導致一些問題。

  • 複製Explorer文件夾到/myproject/api文件夾並添加資源CLA SS作爲API類

    $restler->addApiClass('Resources'); //this produces the needed resources.json 
    
  • 如果您正在使用一個命名空間添加用戶類,確保它是命名空間下定義,並與包括陳述或自動加載磁帶機提供。

  • 您可以創建/myproject/api/cache文件夾並將其設置爲可寫。當您如下所示實例化生產模式與緩存刷新restler,它會創建緩存文件夾routes.php文件列出的所有路由信息

    $restler = new Restler(true,true); //production_mode, refresh 
    

希望能找到什麼錯上述

+0

我按照前兩個步驟解決了問題。謝謝,我真的很感謝你的幫助:) – siannone

+0

我有類似的問題。這一切都在昨天工作,然後我開始接收來自Restler的404消息。我的網絡服務器配置都沒有改變。 通過index.php去工作,去這樣或沒有index.php創建一個routes.php文件,在兩種情況下是相同的。 –

+0

請忽略我的評論;我使用了錯誤的URL .. Doh –