2016-05-12 6 views
1

PROBLEM: AJAX-Anforderung nicht mit dem Präfix ArbeitsLaravel Präfix und AJAX

Webseite funktioniert gut ohne Sprache Präfix. Aber ich brauche es .. Also vorher (keine Middleware) und Ajax Post auf Domain.com Berechtigung hat super funktioniert.

Wenn jedoch auf mit dem Präfix (domain.com/ en/Anspruch) und mit dem Präfix-Middleware-Posting wirft einen Fehler MethodNotAllowedHttpException in RouteCollection.php line 219:

Die Stackoverflow Beiträge I auf Routing prefix gesehen konzentrieren auf GET bezogene Probleme. Wie Laravel 5 route prefix. Ich habe ein POST-Problem (das GET funktioniert gut)

Irgendwelche Ideen?

WEGE

Route::group(['middleware' => ['web']], function() { 

    Route::group(
    [ 
     'prefix' => LaravelLocalization::setLocale(), 
     'middleware' => [ 'localeSessionRedirect', 'localizationRedirect' ] 
    ], 
    function() 
    { 

     Route::get('/', array(
      'as' => 'home', 
      'uses' => '[email protected]' 
     )); 

     Route::post('/entitlement', array(
      'as' => 'entitlement-post', 
      'uses' => '[email protected]' 
     )); 
    } 
} 

AJAX REQUEST

$.ajax({ 
    type: 'POST', 
    url: '/entitlement', --> Becomes domain.com/en/entitlement 
    data: data, 
    dataType:'json', 
    beforeSend: function() { 
    }, 
... 

LocalizationSessionRedirect

<?php namespace Mcamara\LaravelLocalization\Middleware; 

use Illuminate\Http\RedirectResponse; 
use Closure; 

class LocaleSessionRedirect { 

    /** 
    * Handle an incoming request. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @param \Closure $next 
    * @return mixed 
    */ 
    public function handle($request, Closure $next) 
    { 
     $params = explode('/', $request->path()); 
     $locale = session('locale', false); 

     if (count($params) > 0 && $locale = app('laravellocalization')->checkLocaleInSupportedLocales($params[ 0 ])) 
     { 
      session([ 'locale' => $params[ 0 ] ]); 

      return $next($request); 
     } 

     if ($locale && app('laravellocalization')->checkLocaleInSupportedLocales($locale) && !(app('laravellocalization')->getDefaultLocale() === $locale && app('laravellocalization')->hideDefaultLocaleInURL())) 
     { 
      app('session')->reflash(); 
      $redirection = app('laravellocalization')->getLocalizedURL($locale); 

      return new RedirectResponse($redirection, 302, [ 'Vary' => 'Accept-Language' ]); 
     } 

     return $next($request); 
    } 
} 
+0

in der Ajax-Anfrage nicht die URL Braucht noch die Sprache Präfix oder ist das, was 'localizationRedirect' tun soll? Vielleicht können Sie uns das zeigen, wenn das der Fall ist? – tptcat

+0

@tptcat Danke für schnelle Antwort. Der AJAX wird dynamisch erstellt, sodass der fehlgeschlagene POST domain.com/en/entitlement lautet. Aktualisiert die Frage mit der localizationSessionRedirect von Mcamara Bibliothek –

+0

Schau hier: https://laracasts.com/discuss/channels/general-discussion/mcamaralaravel-localisation-usage-and-understanding-need-help?page=1 – tptcat

Antwort

0

Dank tptcat die Antwort ist Middleware von Mcmara Redirect zu nehmen.

AKTUALISIERT ROUTE

Route::group(
    [ 
     'prefix' => LaravelLocalization::setLocale(), 
//  'middleware' => [ 'localeSessionRedirect', 'localizationRedirect' ] --> Not included 
    ], 
    function() 
    {