2017-08-29 4 views
0

Ich benutze Laravel als ein RestAPI mit React am Frontend. Die GET-Route funktioniert, aber innerhalb des gleichen Controllers nicht die Routen PUT und DELETE.Nur einige Laravel Routen im Controller arbeiten

Hier sind die Routen wie in api.php angegeben. Andere (nicht aufgelistete) Routen innerhalb dieser Datei funktionieren ebenfalls.

// works 
Route::get('unapproved', [ 
    'uses' => '[email protected]', 
    'middleware' =>'auth.jwt' 
]); 
// doesn't work (404 error) 
Route::put('unapproved/${id}', [ 
    'uses' => '[email protected]', 
    'middleware' =>'auth.jwt' 
]); 
// doesn't work (404 error) 
Route::delete('unapproved/${id}', [ 
    'uses' => '[email protected]', 
    'middleware' =>'auth.jwt' 
]); 

Hier ist AdminController.php. Es gibt ein paar andere funktionierende Controller, die ich nicht aufgelistet habe.

class AdminController extends Controller 
{ 
    // works 
    public function indexEvents() // works 
    { 
    return Event::where('approved', 0)->get(); 
    } 
    // not recognized by api.php 
    public function approveEvent(Request $request, $id) 
    { 
    echo $request; // for testing purposes 
    } 
    // not recognized by api.php 
    public function deleteEvent() 
    { 
    $event = Event::find($id); 
    $event->delete(); 
    return response()->json(null, 204); 
    } 
} 

API-Anfragen von auth.js kommen, wo andere Anfragen arbeiten:

// works 
getEvents: (token) => { 
    const url = `api/unapproved?token=${token}` 
    return new Promise((resolve, reject) => axios.get(url) 
    .then(res => resolve(res.data)) 
    .catch(err => reject(err))) 
}, 
// doesn't work 
approveEvent: (token, event, id) => { 
    const url = `api/unapproved/${id}?token=${token}` 
    return new Promise((resolve, reject) => axios.put(url, event) 
    .then(res => resolve(res.data)) 
    .catch(err => reject(err))) 
}, 
// doesn't work 
deleteEvent: (token, id) => { 
    const url = `api/unapproved/${id}?token=${token}` 
    return new Promise((resolve, reject) => axios.delete(url) 
    .then(res => resolve(res.data)) 
    .catch(err => reject(err))) 
}, 

Die die AuthController.php muss zugänglich von api.php weil die GET Route funktioniert, aber die zwei PUT und ich nicht aufgeführt Routen DELETE Arbeiten. Die Arbeitswege verwenden die gleiche Middleware, und ich bekomme 404 Fehler, keine Authentifizierungsfehler.

Ich habe console.logged in api.js die URLS jeder Route wird gehen und sie entsprechen, was erwartet wird. Außerdem basieren die Routen und ihre entsprechenden Funktionen auf anderen Teilen der Website, die funktionieren - der einzige Unterschied sind Variablen.

Gibt es einen Grund, warum es einige Routen erkennt, die Funktionen innerhalb eines Controllers verwenden, aber keine anderen Routen, die auf verschiedene Funktionen innerhalb desselben Controllers zeigen?

Systeminfo: Laravel 5.4, PHP 5.6, läuft lokal mit Apache auf Linux Mint.

Antwort

1

Ihre Routen innerhalb Laravel sind falsch, müssen Sie die $ vor den Bindungen entfernen:

// doesn't work (404 error) 
Route::put('unapproved/{id}', [ 
    'uses' => '[email protected]', 
    'middleware' =>'auth.jwt' 
]); 
// doesn't work (404 error) 
Route::delete('unapproved/{id}', [ 
    'uses' => '[email protected]', 
    'middleware' =>'auth.jwt' 
]); 

Sie werden auch die id-deleteEvent Methode übergeben werden soll.

Ich würde auch einen Blick auf implicit bindings werfen, die Ihre Events automatisch auflösen könnte.

+0

Ich habe gerade einen kleinen Test mit $ in meinen Routen und sie funktionieren gut. Die Routen im Javascript sind ebenfalls mit $ definiert. – Rimble

+0

seltsam das $ {id} arbeitete an einigen Orten, aber nicht andere ..... aber das hat funktioniert! –

Verwandte Themen