【问题标题】:Returning a controller in Laravel 5.6 route file在 Laravel 5.6 路由文件中返回一个控制器
【发布时间】:2018-04-23 08:01:03
【问题描述】:

我正在尝试将请求路由到控制器方法。当我这样做时,它会起作用:

Route::get('/path', 'controller@method');

我想在调用控制器之前设置语言环境。我尝试了不同的选项,但没有任何效果:

Route::get('/path', function(){
   desired_function();
   return action('controller@method');
});

Route::get('/path', function(){
   desired_function();
   return [
    'uses' => 'controller@method'
    ];
});

我错过了什么?

【问题讨论】:

标签: laravel


【解决方案1】:

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

2) 将其附加到路由:

Route::get('/path', 'controller@method')
       ->middleware('App\Http\Middleware\SetLocale');

或路由组:

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

【讨论】:

  • 谢谢,我会试试的。据我所知,为什么我不能重定向到控制器?
  • 你的意思是:redirect ?
  • 我写的例子是在你的控制器动作被调用之前准备东西。这就是为什么它被称为中间件。那么,如果在通过中间件后已经被调用,为什么还要重定向到控制器呢?
  • 更正:需要在中间件文件中添加use App
  • @Patriot 见斜线:\App ;)
猜你喜欢
  • 1970-01-01
  • 2021-07-11
  • 1970-01-01
  • 2018-12-24
  • 1970-01-01
  • 1970-01-01
  • 2013-09-21
  • 2017-03-11
  • 2019-03-31
相关资源
最近更新 更多