【问题标题】:Laravel 5 - Sessions in RoutesLaravel 5 - 路由会话
【发布时间】:2015-07-31 22:09:33
【问题描述】:

我想在 Laravel 5 中使用动态路由,依赖于语言偏好,而不是子域/段。有一种默认语言,即使他没有登录,用户也可以更改它(使用 GET 参数)。更改将保留在会话中(注册用户可以保存它)。搜索引擎优化不应该是一个问题(有一个网站默认语言,机器人应该总是得到那个)。

问题是应用程序会话在 routes.php 中不可用(我想是由于 Laravel 设计)。我想在 routes.php 中使用 switch 或 trans() 来动态创建它们,但它与应用程序不同。

我已尝试使用服务容器,但会话此时尚未完全正常工作 (https://github.com/laravel/framework/pull/7933#issuecomment-78175846),因此我无法使用它来初始化配置变量。

中间件是另一种选择,但它们是在路由之后加载的。

有没有办法在路由中使用会话?我有什么(更好的)替代方法来解决这个问题吗?

【问题讨论】:

    标签: php session laravel laravel-5


    【解决方案1】:

    请求完成后不一定会加载中间件。查看文档:http://laravel.com/docs/5.0/middleware#defining-middleware

    中间件在请求之前还是之后运行取决于中间件本身。

    如果我理解正确,您可以使用以下代码引用相应的控制器:

    <?php namespace App\Http\Middleware;
    
    use Closure;
    
    class BeforeMiddleware implements Middleware {
    
        public function handle($request, Closure $next)
        {
            // Perform action
    
            return $next($request);
        }
    }
    

    虽然我没有测试过。

    话虽如此,我仍然不会使用相同的 url 来提供不同的内容。然后至少使用规范的 url,将搜索爬虫指向正确的方向。

    【讨论】:

    • 我只是尝试过(之前和之后)来测试它,它们在请求之前和之后执行,但都在路由之后执行。也许我需要一种不同的方法。关于规范的 url,你是对的,我将不得不使用它。
    • 您想要实现的究竟是什么?将使用不同语言的用户发送到不同的控制器?
    • 允许用户切换到不同的语言,包括网址。例如,页面domain.com/about-us(内容为英文)将变为domain.com/sobre-nosotros(内容为西班牙文)。因此,同一主题的网址和内容会有所不同。
    • 这样啊。由于我的信息很少,我假设这些页面存储在数据库中?为什么不将每个页面路由到一个控制器,该控制器获取会话,然后基于该会话执行数据库请求?喜欢:'table_'. \Session::get('lang');
    • 是的,它们中的大多数都在数据库中,我使用类似于您所说的东西(当没有找到特定规则并在数据库中搜索时使用“页面”通用控制器)。但是,我需要一些更复杂的页面,这些页面需要特定的路由规则,例如登录、注册、个人资料、联系人、帮助、常见问题解答等。所以,现在我有这样的东西(在 switch/if 中或使用 trans( )): Route::get('contact', 'ContactController@index'); Route::get('contacto', 'ContactController@index');同样,我需要语言来区分我应该过滤哪些规则(或替代规则)。
    猜你喜欢
    • 2016-09-05
    • 1970-01-01
    • 1970-01-01
    • 2016-05-27
    • 2017-05-22
    • 2017-10-02
    • 2016-07-01
    • 2015-09-10
    • 1970-01-01
    相关资源
    最近更新 更多