2013-12-10 11 views
5

Ho installato Restler sul mio server locale per testare e creare alcune API per il mio progetto.Restler restituisce sempre 404: Non trovato

Le richieste API vengono gestite tramite http://localhost/myproject/api/.

Il problema è che ogni volta che provo a fare una richiesta ottengo il seguente errore:

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

Anche questo è il mio .htaccess:

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

E questo è ciò che il api.php appare come:

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(); 

Immagino ci sia un po 'di confusione intorno, ma non riesco davvero a capire cosa c'è che non va.

(ho anche provato alcune soluzioni su StackOverflow, ma non sembra funzionare per me)

Edit:

ho cercato di raggiungere l'esempio utilizzando il percorso http://localhost/myproject/resources/engine/library/restler/public/examples segue e che stanno lavorando , quindi penso che abbia a che fare con la configurazione di Restler stessa perché non sembra funzionare in http://localhost/myproject/api.

Inoltre ho anche provato a copiare il Restler Explorer in http://localhost/myproject/api/explorer e continuo a ricevere l'errore: 404 : Not Found ../resources.json probabilmente perché non ho installato Restler nella cartella principale del mio progetto. Come dovrei installare Restler in una sottocartella diversa?

Edit 2: Ho appena spostato la seguente classe nella esempio 001 cartella:

class User { 

    function data() { 

     return "HELLO!"; 
    } 
} 

e ha aggiunto questa linea all'interno del index.php dell'esempio:

$r->addAPIClass('User'); 

Se provo per eseguire l'esempio a .../_001_helloworld/index.php/say/hello funziona senza problemi ma se provo _001_helloworld/index.php/user/data non lo è.

A questo punto ho perso ogni speranza e ho davvero bisogno di aiuto perche' davvero mi manca qualcosa, ma davvero non riesco a immaginare che cosa :(AIUTO!

risposta

2

Ecco come si può eseguire il debug e trovare che cosa è sbagliato,

  • Rimuovere lo spazio dei nomi in api.php. non è necessario e causerà problemi.

  • cartella esploratore Copia nella cartella /myproject/api e aggiungere le risorse cla ss come una classe API

    $restler->addApiClass('Resources'); //this produces the needed resources.json 
    
  • Se si aggiunge classe User con uno spazio dei nomi, assicurarsi che definisce in quel namespace e rese disponibili con il vostro comprendono dichiarazioni o autoloader.

  • È possibile creare la cartella /myproject/api/cache e renderla scrivibile. Quando si crea un'istanza restler in modalità di produzione con aggiornamento della cache, come mostrato di seguito, si creerà routes.php nella cartella della cache che elenca tutte le informazioni percorsi

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

Speranza trovate che cosa è sbagliato con quanto sopra

+0

Ho seguito i primi 2 passaggi e questo ha risolto il problema. Grazie, apprezzo molto il tuo aiuto :) – siannone

+0

Sto avendo un problema simile. Funzionava tutto ieri, poi ho iniziato a ricevere il messaggio 404 da Restler. Nessuna configurazione del mio server web è stata modificata. Passando tramite index.php funziona, e andando in questo modo o senza index.php crea un file routes.php che è identico in entrambi i casi. –

+0

Si prega di ignorare il mio commento; Stavo usando l'URL sbagliato .. Doh –

Problemi correlati