laravel会在每次通话时重新加载课程吗?

时间:2017-01-12 19:15:40

标签: php laravel

我试图在请求之间松散地维护持久数据。显然,数据库是维护数据的最佳方式,但在这种情况下,确切的正确性非常不重要。

我在我的一个控制器中使用静态变量,但似乎每次请求都会重置。 laravel是否会在每次请求时重新加载条款?

示例代码:

class HomeController extends BaseController {
        public static $test = 0;


        public function getIndex() {
                LogHelper::info("TEST: " . HomeController::$test);
                HomeController::$test = HomeController::$test + 1;
                return View::make('layouts.home.index');
        }
}

每次请求时都会记录0。有没有办法在不使用数据库的情况下维护持久变量?

编辑:我需要将变量作为所有用户/会话之间的共享。就像一个点击计数器。

2 个答案:

答案 0 :(得分:3)

是的,Laravel不会在请求之间保留变量,您需要使用会话,数据库等手动保存数据。

例如,您可以使用会话保存数据:

session(['data' => $data]);

在下一个请求中获取数据:

$data = session('data');

<强>更新

如果您想创建一些不断增加的costants,请使用众多软件包之一将数据保存到配置文件中。 /config/my.php config:

的示例
<?php

return [
    'value' => 20,
];

从应用程序的任何部分获取此信息:

$value = config('my.value');

另一种方法是在DB中保存数据。

答案 1 :(得分:1)

HTTP是无状态协议。因此,除非确保此数据持续存在,否则在后续对Web服务器的请求之间不会保留任何数据。

每次请求PHP脚本时,PHP都会负责编译并加载所请求的PHP文件并重新运行它们。全局变量或静态变量中不保留任何数据,必须重新检索以获得所需的数据状态。 编辑(严格来说,编译的PHP文件的字节代码可能会被缓存,这取决于一个人的安装细节。)

在页面访问之间为用户提供一致体验的最常用方法是使用会话。在任何PHP脚本中,您都应该能够使用以下命令启动脚本:

session_start();

然后您可以使用$ _SESSION变量

存储后续页面访问的值
$_SESSION['my_var'] = "some value";

在后续页面请求中,您必须再次调用session_start,然后您应该能够检索存储在会话中的值:

session_start(); // gotta call this before setting/getting session values
echo "my_var is " . $_SESSION['my_var'];

会话处理实际上是一个相当精细的过程,涉及生成会话ID,选择存储方法等。有关更多详细信息,请阅读php docs on session handling

如果您使用的是特定框架(在您的情况下为laravel),您可以确保自定义functions peculiar to that framework,这可以使事情变得更容易。