在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
];