您正在控制器中实例化 Facebook 连接器,并且您不想这样做两次,因此您希望模型能够访问它是有道理的。到现在为止还挺好。有两种方法可以做到这一点。
1) 创建一个库,其中包含一个包装 Facebook 实例的单例实例。看起来像这样:
// libraries/FacebookApi.php
class FacebookApi {
// this stores the singleton FacebookApi
protected static $instance = null;
// this is the singleton's Facebook instance
protected $facebook = null;
// Return the single FacebookApi wrapper
public static function instance() {
if (!isset(FacebookApi::$instance)) {
self::$instance = new FacebookApi();
}
return $instance;
}
// Construct a single FacebookApi containing a single Facebook
protected function __construct() {
$this->facebook = new Facebook(
Kohana::config('mysubs.facebook_apikey'),
Kohana::config('mysubs.facebook_secret')
);
}
}
你的控制器和你的模型都会像这样访问它:
$facebook = FacebookApi::instance()->facebook;
$facebook->require_login(); // etc
来自 Kohana 2.x 的示例代码:
http://dev.kohanaframework.org/projects/kohana2/repository/entry/trunk/system/libraries/Database.php
2) 由于除了访问 Facebook 类之外您可能不会对实际库做任何事情,因此只需创建一个简单的帮助器来包装单例:
// helpers/facebook_api.php
class facebook_api {
static $facebook = null;
static function instance() {
if (!self::$facebook) {
self::$facebook = new Facebook(
Kohana::config('mysubs.facebook_apikey'),
Kohana::config('mysubs.facebook_secret')
);
}
return self::$facebook;
}
}
你的控制器和你的模型都会像这样访问它:
$facebook = facebook_api::instance();
$facebook->require_login(); // etc