0

使用routes.php前缀很容易为不同语言创建路径,例如,我们可以使用以下方法创建关于页面路由aboutpl/o-nas指向同一路由的 url:

if (\Request::segment(1) =='pl') {
    $prefix ='pl';
    \App::setLocale('pl');
}
else{
    $prefix ='';
    \App::setLocale('en');
}

Route::group(
    array('prefix' => $prefix,
    function () {
        Route::any('/'.trans('routes.about'), 'Controller@action'); 
    }
);

但是我们知道 Laravel 5 默认使用注解。是否可以使用注释来实现相同的目标?目前关于在 Laravel 5 中使用注解的信息并不多。

您可以先将类似代码添加RouteServiceProver到方法中:before

if (\Request::segment(1) =='en') {
    $routePrefix ='';
    $this->app->setLocale('en');
}
else{
    $routePrefix ='pl';
    $this->app->setLocale('pl');
}

但是我们如何在注释本身中使用这个前缀和翻译​​以及如何在这里使用 trans 函数?它应该是这样的,但它显然不起作用,因为您不能简单地将函数放入注释中,而且我不知道是否有任何方法可以在此处添加前缀。

/**
 * @Get("/trans('routes.about')")
 * @prefix: {$prefix}
 */
public function about()
{
   return "about page";
}
4

1 回答 1

0

像这样的东西应该工作:

<?php namespace App\Http\Middleware;

use Closure;
use Illuminate\Contracts\Routing\Middleware;

class LangDetection implements Middleware {

    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if ($request->segment(1) =='en') {
              $this->app->setLocale('en');
        }
        else{
              $this->app->setLocale('pl');
        }

        return $next($request);
    }

}

然后确保在每次调用时都运行它 - 将其放入应用程序中间件堆栈(app/Providers/AppServiceProvider.php):

protected $stack = [
    'App\Http\Middleware\LangDetection',
    'Illuminate\Cookie\Middleware\Guard',
    'Illuminate\Cookie\Middleware\Queue',
    'Illuminate\Session\Middleware\Reader',
    'Illuminate\Session\Middleware\Writer',
];

编辑:或者您不必将其放入堆栈中,您可以将其保留为“中间件过滤器”并在特定路由上调用它 - 就像您已经为“auth”、“csrf”等所做的一样

于 2014-10-20T10:04:23.663 回答