2017-10-19 9 views
0

Voici la liste d'un groupe de contrôleurs:MethodNotAllowedHttpException, redirect à 404

Route::group([ 
     'prefix'  => 'some-prefix', 
    ], function() { 
     Route::get('/', '[email protected]')->name('some-prefix'); 
     Route::post('/get', '[email protected]')->name('some-prefix.get'); 
     Route::get('/getall/{type}', '[email protected]')->name('some-prefix.getall'); 
     Route::get('/create', '[email protected]')->name('some-prefix.create'); 
     Route::post('/', '[email protected]')->name('some-prefix.store'); 
     Route::get('/edit', '[email protected]')->name('some-prefix.edit'); 
     Route::get('/{id}/edit/', '[email protected]')->name('some-prefix.edit'); 
     Route::put('/{id}', '[email protected]')->name('some-prefix.update'); 
     Route::get('/cambiarestado/{id}', '[email protected]')->name('some-prefix.cambiarestado'); 
    }); 

Je veux rediriger vers une erreur 404 quand je tape l'URL:

http://myapp.com/some-prefix/ANYTHING-that-doesnt-match 

est ici quand je suis arrivé l'erreur suivante:

(1/1) MethodNotAllowedHttpException 
in RouteCollection.php (line 251) 
at RouteCollection->methodNotAllowed(array('PUT')) 
in RouteCollection.php (line 238) 
at RouteCollection->getRouteForMethods(object(Request), array('PUT')) 
in RouteCollection.php (line 176) 

Je mis un failOrFind dans mon store et edit méthodes dans mon contrôleur, donc je peux REDICT à 404 routes comme:

http://myapp.com/some-prefix/9999/edit 

où la valeur 9999 n'existe pas, mais comment puis-je faire ce que je demandé?

+0

Quel est le code de MyController @ update et MyController @ edit? Puisque ceux-ci acceptent un paramètre dynamique, vous devriez gérer le 404 là. – Devon

Répondre

2

Aller à App\Exception ouvrir handler.php en render() méthode add:

public function render($request, Exception $exception) 
    { 
     if($exception instanceof \Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpExceptionn){ 
      return abort('404'); 
      } 
     return parent::render($request, $exception); 
    } 
+0

J'y ajoutais de nouvelles lignes, voyons. J'ai un code qui devrait être changé ... – pmirnd

+1

@leo s'il vous plaît modifier votre code 'MethodNotAllowedHttpException' pas' MethodNotAllowedHttpExceptionn', notez deux "n" à la fin. –

1

Vous pouvez faire quelque chose comme ça dans vos itinéraires:

Route::get('/some-prefix/{any}', function() { 
    return abort('404'); 
})->where('any', '.*'); 
+1

Merci, j'essayais quelque chose comme ça aussi sans succès. Je choisirais celui-ci comme étant correct car je préfère toucher le code Routes que le Handler, mais le problème est que j'ai beaucoup de groupes de routes similaires ... (ma faute pour la mauvaise conception de code, je devrais utiliser 'resource' plutôt obtenir, poster, mettre, etc.) – pmirnd

0

C'est ce que je l'ai fait (je prends la réponse @Leo_Kelmendi comme le bon, je veux juste partager tout mon code avec celui qu'il a mis aussi, d'ailleurs il a 2 'n' le MethodNotAllowedHttpExceptionn):

public function render($request, Exception $exception) 
{ 
    /* 
    * Redirect if token mismatch error 
    * Usually because user stayed on the same screen too long and their session expired 
    */ 
    if ($exception instanceof TokenMismatchException) { 
     return redirect()->route('frontend.auth.login'); 
    } 

    /* 
    * All instances of GeneralException redirect back with a flash message to show a bootstrap alert-error 
    */ 
    if ($exception instanceof GeneralException) { 
     return redirect()->back()->withInput()->withFlashDanger($exception->getMessage()); 
    } 

    if($exception instanceof \Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException){ 
     return abort('404'); 
    } 

    return parent::render($request, $exception); 
}