【发布时间】: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