gpt4 book ai didi

php - 创建我们自己的 session 处理程序

转载 作者:行者123 更新时间:2023-12-03 17:25:06 25 4
gpt4 key购买 nike

我正在尝试创建自己的 session 处理程序。我找到了这个 resource .问题是他更改了 vendor 目录,这是我不想做的。

这样做的原因是,我正在与其他人合作,这是一个使用版本控制系统的协作项目(推送主应用程序忽略供应商文件夹)和除此之外,我假设每次安装 composer 时,所有更改都将丢失(尽管我不确定)。

我想到了更改 DatabaseSessionHandler,毕竟,我想要的只是更改 Laravel 用于存储 session 的表的字段名称(我正在研究一个预现有数据库),但它与我上面提到的相同。

有什么方法可以创建我自己的 session 处理程序并在我的应用程序中使用它?服务提供商还是更好的东西?

链接将不胜感激。

更新

有些事情我想澄清一下,我希望能够使用 LaravelAPI .

我找到的另一个资源是 Laravels 文档 how to write a session extension ,但我认为缺少了很多东西。它说我必须创建一个服务提供者,因为 session 在请求生命周期的早期就开始了。从那里有什么方向吗?

最佳答案

It says I have to create a service provider cause sessions are started very early in the request-lifecycle. Any directions from there?

这实际上意味着您必须在 IoC-Container 中注册一个 session 服务提供者。在请求生命周期的早期。

由于 app/config/app.php 中的绑定(bind)将在 laravel 的引导过程中很早就注册,因此它是绑定(bind)自定义 SessionHandler-扩展。

基本上你需要以下东西来解决你的问题:

  • 将 SessionHandlerInterface(您的具体自定义 session 处理程序)的新实例绑定(bind)到 IoC 容器的服务提供者
  • 并编辑您的 app/config/app.php 以添加您的新服务提供商
  • 您的自定义 session 处理程序类

让我们开始吧:

引导服务提供者:

Docs告诉我们在 Illuminate\Session\SessionServiceProvider 下方 添加我们的自定义服务提供商,因此在您的 app/config/app.php 中添加以下行在 laravel SessionServiceProvider 下面:

'MyProject\Extension\CustomSessionServiceProvider',

现在在 laravels 引导过程中 CustomSessionServiceProvider 将在 laravels 之后立即加载。在我们的自定义提供程序中,我们将进行实际绑定(bind)。

创建服务提供者:

现在您已确定正在加载服务提供者,我们将实现它。在服务提供者中,我们可以覆盖我们将要执行的 laravels DatabaseSessionHandler 的绑定(bind)。

<?php namespace MyProject\Extension;

use Illuminate\Support\ServiceProvider;
use Session;

class CustomSessionServiceProvider extends ServiceProvider {

public function register()
{
$connection = $this->app['config']['session.connection'];
$table = $this->app['config']['session.table'];

$this->app['session']->extend('database', function($app) use ($connection, $table){
return new \MyProject\Extension\CustomDatabaseSessionHandler(
$this->app['db']->connection($connection),
$table
);
});
}

}

首先,我们获取用于存储 session 的连接类型,然后获取将存储 session 的表。

由于您只想更改列名,我们不需要实现全新的数据库 session 处理程序。相反,让我们扩展 Laravels Illuminate\Session\DatabaseSessionHandler 并覆盖必要的方法。

Laravels DatabaseSessionHandler 有两个依赖项。 ConnectionInterface 的实现和表名。两者都被注入(inject)到我们的 CustomDatabaseSessionHandler 中,您可以在上面看到。

然后我们只需在闭包中返回我们的 CustomDatabaseSessionHandler

创建实际的 CustomDatabaseSessionHandler

现在我们已准备好启动新的 CustomDatabaseSessionHandler,让我们来创建它吧。

没什么可做的。只有四种方法使用硬编码列。我们将只扩展 Illuminate\Session\DatabaseSessionHandler 类并覆盖这四个。

<?php namespace MyProject\Extension;

use Illuminate\Session\DatabaseSessionHandler;

class CustomDatabaseSessionHandler extends DatabaseSessionHandler {

public function read($sessionId)
{
// Reading the session
}

public function write($sessionId, $data)
{
// Writing the session
}

public function destroy($sessionId)
{
// Destryoing the Session
}

public function gc($lifetime)
{
// Cleaning up expired sessions
}

}

因为您只想更改列名,您甚至可以从父类复制方法主体,然后只更改您想要的内容。

就是这样。快乐编码,享受 Laravel 带来的乐趣!

关于php - 创建我们自己的 session 处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24280781/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com