クラス内に非クラスを含めたりラップしたりするのに適したパターンは何ですか? たとえば、phpbb ボードにログインするには、この php ファイルhttps://github.com/widop/phpbb3/blob/master/common.phpを使用する必要があります。具体的には、phpbb をブートロードするためにこのファイルが必要です。次に、$user 変数と $auth 変数を使用してユーザーをログインさせます。私のコードには AuthClient クラスがあります。
phpbb から common.php をインクルードし、クラス内で使用するためのベスト プラクティスを見つけようとしています。
=========フィードバックに基づいて編集======================
改善されたと思いますが、まだ機能していません。
エラーの取得:
[2013-09-05 14:28:49] log.ERROR: exception 'Symfony\Component\Debug\Exception\FatalErrorException' with message 'Cannot redeclare class auth' in /var/www/phpbb3/includes/auth.php:24
Stack trace:
#0 [internal function]: Illuminate\Exception\Handler->handleShutdown()
#1 {main} [] []
これは、bootstrap.php によってロードされた名前空間のないクラスを参照します。
https://github.com/widop/phpbb3/blob/master/common.php
https://github.com/widop/phpbb3/blob/master/includes/auth.php
ブートストラップ.php
define('IN_PHPBB', true);
$phpbb_root_path = base_path() . "/phpbb3/";
$phpEx = substr(strrchr(__FILE__, '.'), 1);
require_once(base_path() . '/phpbb3/common.php');
LoginController.php - Laravel
use myproject\models\User;
use myproject\models\phpbb\Phpbb;
use myproject\models\phpbb\AuthClient;
use myproject\models\phpbb\User as PhpbbUser;
require_once(base_path() . '/app/models/Phpbb/bootstrap.php');
class LoginController extends BaseController{
public function login(){
//...login in main application
//Login in phpbb - more ewww
global $user;
global $auth;
$phpbb = new AuthClient($user, $auth);
$phpbb->login();
}
}
AuthClient.php
<?php
namespace myproject\models\phpbb;
use myproject\models\phpbb\Phpbb;
class AuthClient{
protected $user;
protected $auth;
public function __construct($user, $auth){
$this->user = $user;
$this->auth = $auth;
}
public function login($user_id, $admin, $autologin){
$this->user->session_begin();
$this->auth->acl($this->user->data);
$result = $this->user->session_create($user_id, $admin, $autologin, true);
}
public function logout(){
$this->user->session_kill();
$this->user->session_begin();
}
}
フィードバック前の元のコード - もう使用していません**
class AuthClient implements IAuthClient{
protected $user;
protected $auth;
public function __construct(){
/** Bootloading PHPBB */
define('IN_PHPBB', true);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);
// Start session management
$this->user = $user;
$this->auth = $auth;
$this->user->session_begin();
$this->auth->acl($user->data);
}
public function login($user_id, $admin, $autologin){
$result = $this->user->session_create($user_id, $admin, $autologin, true);
}
public function logout(){
$this->user->session_kill();
$this->user->session_begin();
}
}