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.
Ich habe gerade einen kleinen Test mit $ in meinen Routen und sie funktionieren gut. Die Routen im Javascript sind ebenfalls mit $ definiert. – Rimble
seltsam das $ {id} arbeitete an einigen Orten, aber nicht andere ..... aber das hat funktioniert! –