【问题标题】:Where should I store the Laravel Session data based on the MVC pattern?我应该在哪里存储基于 MVC 模式的 Laravel 会话数据?
【发布时间】:2018-08-08 09:49:14
【问题描述】:

我正在使用与 WordPress 集成的 Laravel,并且很难理解我应该将基于 MVC 设计模式的会话数据放在哪里?

过去,我曾经将所有内容都放在视图(header.php 和 footer.php)文件中,一段时间后,它变得一团糟,一团糟。

here所写:

作为 MVC,我使用 CodeIgniter,所以我不知道这是否适用于您的特定环境,但我通常从控制器设置会话值。即使在视图中也可以这样做,但正确的方法是将代码保留在控制器中(就像将数据库内容保留在模型中一样)。

在控制器中,您可以使用标准的 php $_SESSION 数组,或者,它存在,您的框架会话类。

是的,我知道不要弄乱视图并将会话变量放在控制器中是一个好习惯。问题来了:

当我使用 WordPress 时,目标是有一个始终加载会话变量的地方,无论我是否更改了主题或其他任何东西,它们都应该留在 Laravel 后端。

没有任何测试,我可以考虑几个选项:

  1. 使用 Laravel Service Provider 并在 boot 函数中插入会话变量。
  2. 使用 Laravel 中间件功能,但不知道如何实现。

【问题讨论】:

    标签: php wordpress laravel session-variables laravel-session


    【解决方案1】:

    您可以使用 laravel https://laravel.com/docs/5.6/session 会话助手。

    然后你可以只做Session::put('hello','world'); Session::save(); 并用Session::get('hello'); 检索它你可以在任何你想做的地方做这个,只要你记得在把东西放进去、修改东西或删除东西之后保存会话。

    只要加载了 Laravel 并且域有 laravel session cookie,就可以访问它们。

    【讨论】:

    • 感谢您的回答,我已经阅读了有关 Laravel 的完整 Session 文档 :) 问题,我想知道存储它们的最佳位置在哪里。顺便说一句,您链接的最新 Laravel 文档中不再提交 Session::put('hello','world'); Session::save(); 语法:)
    • @PukaUnknown session()->put() 的作用完全相同,它通过访问静态变量调用 Session::put。但这是语义。您可以在需要存储在会话中的值的任何地方调用它们。在用户身份验证模块中,您在该模块中调用它。对于用户名显示,您在模板或渲染模板的控制器中调用它,对于购物车,您在购物车渲染模块中调用它等等......
    • module 是指在控制器内部?我每次都必须加载那个控制器,也许使用内置的 Service Provider boot 函数会更好?
    • 你有一个控制器,它呈现几个元素。有时您希望重用元素,因此您为它构建自己的渲染代码,这样您就可以重用它,然后只需调用$shoppingRender = new ShoppingCartRender(); return $shoppingRender->render();,这就是我所说的模块。您真的不需要在 boot() 或任何地方调用它,只需将它放在静态类中。 Session 类/帮助函数本身是静态的,并且是单例的,并且可以从任何地方获得。只需在需要的时间和地点调用它。不要把事情复杂化。保持简单。
    • 是的,谢谢,我只是想学习最佳实践,所以在未来,它会很简单 :) 但是我必须在启动时调用该控制器,同时使用 @987654328 @函数,我不需要那个。我说的对吗?