我希望在 Laravel 4 中使用我自己的会话处理程序。我可以在哪里扩展 Laravel 4 会话,以便我可以使用自己指定的类来读取/写入/删除数据。
2 回答
查看有关扩展 Laravel 的 Laravel 文档:http: //laravel.com/docs/4.2/extending#session
您需要创建一个新的 ServiceProvider 以尽早启动新的 Session 处理程序,并将其放置在应用配置中原始 SessionServiceProvider 引用的下方。前任。
use Illuminate\Support\ServiceProvider;
class MySessionServiceProvider extends ServiceProvider {
/**
* Register my custom service provider.
*
* @return void
*/
public function register()
{
$this->registerMySessionHandler();
}
/**
* Register your session manager instance.
*
* @return void
*/
protected function registerMySessionHandler()
{
$this->app->bindShared('mysession', function($app)
{
return new MySessionHandler($app);
});
}
如果您需要更多信息,请查看 Illuminate/Session/SessionServiceProvider.php 和 ServiceProvider 文档 ( http://laravel.com/docs/master/providers )。
编写您的 Session 类:
class MySessionHandler 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) {}
}
然后你可以使用 Session::extend() 方法扩展 Session 类(我相信这在你的开始文件中,但不要引用我的话):
Session::extend('mysession', function($app)
{
return new MySessionHandler;
});
注册会话驱动程序后,您应该mysession
在 app/config/session.php 配置文件中使用该驱动程序。
首先,创建 sessionpayload.php 并将其放置在 application/libraries 文件夹中,并像这样扩展:
class Sessionpayload extends \Laravel\Session\Payload {
//stuff
}
然后,创建 session.php 并将其放置在 application/libraries 文件夹中并像这样扩展:
class Session extends \Laravel\Session {
public static function start($driver)
{
static::$instance = new Sessionpayload(static::factory($driver));
}
}
然后,您应该注释掉下面的行,或者如果您为您的类使用命名空间,您可以更改:
'Session' => 'Laravel\\Session',
在 application/config/application.php 中。