【问题标题】:Laravel prefix and AJAXLaravel 前缀和 AJAX
【发布时间】:2016-09-07 14:26:32
【问题描述】:

问题:AJAX 请求无法使用前缀

网站在没有语言前缀的情况下运行良好。但我需要它。所以之前(没有中间件)和 ajax 发布到 domain.com/entitlement 效果很好。

但是,当使用前缀 (domain.com/en/entitlement) 发布并启用前缀中间件时会引发错误 MethodNotAllowedHttpException in RouteCollection.php line 219:

我看到的关于前缀路由的 stackoverflow 帖子都集中在 GET 相关问题上。喜欢Laravel 5 route prefix。我有一个 POST 问题(GET 工作正常)

有什么想法吗?

路线

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

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

        Route::get('/', array(
            'as' => 'home',
            'uses' => 'HomeController@getHome'
        ));

        Route::post('/entitlement', array(
            'as' => 'entitlement-post',
            'uses' => 'HomeController@postEntlitment'
        ));
    }
}

AJAX 请求

$.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);
    }
}

【问题讨论】:

  • Ajax 请求中的 URL 是否还需要语言前缀或者 localizationRedirect 应该这样做?如果是这样的话,也许你可以告诉我们?
  • @tptcat 感谢您的快速回复。 AJAX 是动态构建的,因此失败的 POST 是 domain.com/en/entitlement。使用 Mcamara 库中的本地化会话重定向更新了问题
  • 谢谢@tptcat!解决了问题!
  • 是否删除了localizationRedirect 中间件?

标签: laravel routing middleware prefix


【解决方案1】:

感谢 tptcat,答案是去掉 Mcmara 重定向的中间件。

更新路线

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

【讨论】:

    猜你喜欢
    • 2017-07-20
    • 2020-07-20
    • 2015-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-07
    相关资源
    最近更新 更多