2017-08-29 194 views
0

我在前端使用Laravel作为RestAPI和React。 GET路径起作用,但在同一个控制器中,PUT和DELETE路由不会。只有一些Laravel路由器在控制器上工作

以下是api.php中指定的路线。此文件中的其他(未列出)路由也起作用。

// 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' 
]); 

这里是AdminController.php。还有一些我没有列出的工作控制器。

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请求从auth.js来,而其他请求工作:

// 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))) 
}, 

的的AuthController.php必须访问从api.php因为GET路线的作品,但两人PUT和DELETE路线我列出了不加工。工作路线使用相同的中间件,我得到404错误,而不是验证错误。

我在console.logged api.js URLs每个路线将要和他们匹配的预期。此外,路线及其相应的功能基于工作的其他部分 - 唯一的区别是变量。

为什么它会识别一些使用控制器内功能的路由,而不是指向同一控制器内不同功能的其他路由的任何原因?

系统信息:Laravel 5.4,PHP 5.6,在Linux Mint上使用Apache进行本地运行。

回答

1

你的内Laravel的路线是不正确的,你需要的绑定之前删除$

// 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' 
]); 

你也想通过iddeleteEvent方法。

我还会看看implicit bindings,它可以自动解析您的Events

+0

我刚在我的路线中做了一个小测试$,他们工作得很好。 javascript中的路由也用它们中的$定义。 – Rimble

+0

奇怪的$ {id}在一些地方工作,但不是其他.....但这工作! –