Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/241.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如果没有';不存在于生产环境中_Php_Laravel - Fatal编程技术网

Php 如果没有';不存在于生产环境中

Php 如果没有';不存在于生产环境中,php,laravel,Php,Laravel,当环境设置为生产环境时,我需要使用数据库来存储我与Laravel 4的会话。如果是本地的,则可以使用标准文件驱动器系统 我没有访问命令行的权限,因此无法运行任何迁移、artisan命令(CloudFoundry安装程序)。所以我的想法是在我的app/start/global.php文件中添加一个检查: if (App::environment('production')) { if(! Schema::hasTable( Config::get('session.table') )) {

当环境设置为生产环境时,我需要使用数据库来存储我与Laravel 4的会话。如果是本地的,则可以使用标准文件驱动器系统

我没有访问命令行的权限,因此无法运行任何迁移、artisan命令(CloudFoundry安装程序)。所以我的想法是在我的
app/start/global.php
文件中添加一个检查:

if (App::environment('production'))
{
    if(! Schema::hasTable( Config::get('session.table') )) {

        Schema::create( Config::get('session.table'), function($table)
        {
            $table->string('id')->unique();
            $table->text('payload');
            $table->integer('last_activity');
        });

    }
}
如果它当前处于生产模式(此位有效),则检查是否有一个表的名称在我的
app/config/session.php
文件中定义。如果不是,则使用该给定名称创建此表。我注意到api()中的
hasTable

但是,当我的应用程序加载时,我会出现以下错误:

RuntimeException:尝试读取会话数据时引发PDOException:SQLSTATE[42S02]:找不到基表或视图:1146表“table_name.sessions”不存在


这是因为应用程序的生命周期吗?否则我怎么做…

您不能这样做,因为会话在加载
global.php
文件之前启动。更具说明性的是,会话在
handle
方法中的
lightlight\session\Middleware
文件中启动,在
handle
方法中可以看到:

if ($this->sessionConfigured())
{
    $session = $this->startSession($request);

    $request->setSession($session);
}
这在框架的引导过程中发生,之后调用
$app->booted
,其中包含
global.php
文件:

// Inside booted handler
$path = $app['path'].'/start/global.php';
if (file_exists($path)) require $path;
因此,在调用
light\session\Middleware\handle
之前需要
会话表。您应该手动创建一个
,如果环境是生产环境,则将使用该表,否则将不使用该表。那么,如果您总是在
数据库中保留一个表,那么会有什么问题呢


我还认为,也许您可以创建一个自定义的
中间件来动态执行此操作,但不确定这是否是一个好主意。

这可能是因为在创建表的代码之前加载了会话驱动程序。尝试将表创建代码移动到会话驱动程序中。为此干杯。我决定手动创建表。。省得花哨:)