Ответ 1
В Laravel есть несколько классов Менеджера, которые управляют созданием основанные на драйверах. К ним относятся кеш, сеанс, аутентификации и компонентов очереди. Класс менеджера отвечает для создания конкретной реализации драйвера на основе конфигурации приложения. Например, класс SessionManager может создать файл, базу данных, cookie и различные другие реализации сеансовых драйверов.
Каждый из этих менеджеров включает метод расширения, который может использоваться для легко вставляйте новые функции разрешения драйвера в диспетчер.
Чтобы расширить Laravel с помощью специального драйвера сеанса, мы будем использовать расширьте способ регистрации нашего пользовательского кода:
Вы должны поместить код расширения сеанса в метод загрузки вашего AppServiceProvider.
Внедрить SessionHandlerInterface
Приложение/Поставщики/AppServiceProvider.php
<?php
namespace App\Providers;
use Session;
use Illuminate\Support\ServiceProvider;
use App\Handlers\MyFileHandler;
class AppServiceProvider extends ServiceProvider
{
public function boot()
{
Session::extend('file', function($app)
{
return new MyFileHandler();
});
}
}
Обратите внимание, что наш пользовательский драйвер сеанса должен реализовать SessionHandlerInterface. Этот интерфейс содержит всего несколько простых методов, которые нам нужно реализовать.
Приложение/Манипуляторы/MyFileHandler.php
<?php
namespace App\Handlers;
use SessionHandlerInterface;
class MyFileHandler implements SessionHandlerInterface {
public function open($savePath, $sessionName) {}
public function close() {}
public function read($sessionId) {}
public function write($sessionId, $data) {}
public function destroy($sessionId) {}
public function gc($lifetime) {}
}
Или вы можете расширить MyFileHandler из FileSessionHandler и переопределить соответствующие методы.
Расширить FileSessionHandler
Приложение/Поставщики/AppServiceProvider.php
<?php
namespace App\Providers;
use Session;
use Illuminate\Support\ServiceProvider;
use Illuminate\Session\FileSessionHandler;
use App\Handlers\MyFileHandler;
class AppServiceProvider extends ServiceProvider
{
public function boot()
{
Session::extend('file', function($app)
{
$path = $app['config']['session.files'];
return new MyFileHandler($app['files'], $path);
});
}
}
Приложение/Манипуляторы/MyFileHandler.php
<?php
namespace App\Handlers;
use Illuminate\Filesystem\Filesystem;
use Illuminate\Session\FileSessionHandler;
class MyFileHandler extends FileSessionHandler
{
public function __construct(Filesystem $files, $path)
{
parent::__construct($files, $path);
}
}
Более подробную информацию можно найти в разделе "Расширение рамки" раздела "Сессия".