在Laravel 5.6路由文件中返回控制器
我正在尝试将请求路由到控制器方法。当我这样做时,它会起作用:在Laravel 5.6路由文件中返回控制器,laravel,Laravel,我正在尝试将请求路由到控制器方法。当我这样做时,它会起作用: Route::get('/path', 'controller@method'); 我想在调用控制器之前设置区域设置。我尝试了不同的选择,但没有任何效果: Route::get('/path', function(){ desired_function(); return action('controller@method'); }); 及 我缺少什么?1)创建一个app/Http/Middleware/SetLoca
Route::get('/path', 'controller@method');
我想在调用控制器之前设置区域设置。我尝试了不同的选择,但没有任何效果:
Route::get('/path', function(){
desired_function();
return action('controller@method');
});
及
我缺少什么?1)创建一个app/Http/Middleware/SetLocale.php,内容如下:
<?php namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
class SetLocale
{
public function handle(Request $request, Closure $next)
{
\App::setLocale('en'); // or get it from request
// or:
// $request->attributes->set('locale', 'en');
// in action: $request->get('locale');
return $next($request);
}
}
或发送到路由组:
Route::group([
'middleware' => [
'App\Http\Middleware\SetLocale'
]
],
function() {
Route::get('/path', 'controller@method');
});
如果您希望在全球各地使用它:
在app/Http/Kernel.php
中:
/**
* The application's global HTTP middleware stack.
*
* @var array
*/
protected $middleware = [
...
'App\Http\Middleware\SetLocale' // add it to end of array
];
提到的问题是关于返回视图而不是控制器。checkout Middleware文档:为什么不在控制器内设置区域设置?@JonasStaudenmeir,因为最初App::setLocale()
在控制器内不起作用。然而,我尝试了使用App
,它确实起了作用。谢谢你,我会试试的。就我个人所知,为什么我不能重定向到控制器?您在word下的意思是:重定向
?我编写的示例是在调用控制器操作之前准备内容。这就是为什么它被称为中间件。那么,如果控制器在通过中间件后已经被调用,为什么要重定向到控制器?更正:您需要在中间件文件中添加使用App
。@Patriot请参阅斜杠:\App
;)
Route::group([
'middleware' => [
'App\Http\Middleware\SetLocale'
]
],
function() {
Route::get('/path', 'controller@method');
});
/**
* The application's global HTTP middleware stack.
*
* @var array
*/
protected $middleware = [
...
'App\Http\Middleware\SetLocale' // add it to end of array
];