2017-08-29 50 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}在一些地方工作,但不是其他.....但這工作! –