2016-05-12 6 views
1

問題:AJAX要求がLaravelプレフィックスとAJAX

ウェブサイトは、言語の接頭辞なしで素晴らしい作品接頭辞で動作していません。しかし、私はそれを必要とする..前に(ミドルウェアなし)とdomain.comへのアヤックス投稿資格は素晴らしい仕事。

ただし、(/資格をアンdomain.com/ )接頭辞転記上プレフィックスミドルウェアを有する場合にはMethodNotAllowedHttpException in RouteCollection.php line 219:

プレフィックスルーティングに私が見たstackoverflowのポストがフォーカスされているエラーをスローGET関連の問題についてLaravel 5 route prefixのように。私はPOSTの問題がある(GETは正常に動作する)

アイデア?

ROUTES

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

は、Ajaxリクエスト内のURLはまだ言語プレフィックスを必要とするか、または 'localizationRedirect'が行うことになっているものということではないでしょうか?もしそうなら、あなたは私たちにそれを見せることができますか? – tptcat

+0

@tptcat迅速な対応をありがとう。 AJAXは動的に構築され、失敗したPOSTはdomain.com/en/entitlementです。 Mcamaraライブラリ –

+0

のlocalizationSessionRedirectに関する質問を更新しました。こちらをご覧ください:https://laracasts.com/discuss/channels/general-discussion/mcamaralaravel-localization-usage-and-understanding-need-help?page=1 – tptcat

答えて

0

感謝tptcat答えは、Mcmaraのリダイレクトのミドルウェアを取り出すことです。

UPDATED ROUTE

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