#######################################
#### THIS ISSUE HAS BEEN RESOLVED! ####
########################################
The issue is that the object lost its scope since I have a separate function
that puts together all the template files in order and the class wasn't
insantiated within that function. I think what I'm going to try to do is
rewrite the uFlex auth class as separate functions so it doesn't lose
scope within my framework.
uFlex 認証クラスを PHP フレームワークに統合しています。私はクラス自体をしっかりと理解しており、すべての例を独自に動作させて、依存関係をむき出しにすることにしました。フレームワーク内で動作させることができましたが、何かを行う必要がある直前にオブジェクトを再インスタンス化した場合に限ります。これは反復的で不必要です。
私のフレームワークには、最初に使用するために必要なすべてのファイルを含む init/bootstrap ファイルがあります。この場合、クラス uflex.php ファイルがここに含まれています。次に、uflex オブジェクトの正しいデータベース資格情報を確立し、uflex オブジェクトを開始します。次に、これらのファイルがインクルードされ、uflex オブジェクトがインスタンス化された直後に、要求された URL に基づいて特定の順序でテンプレート ファイルをインクルードします。
ログインページの例: http://mysite.com/login/
<?php //files included when above url is requested
include 'framework-init.php';
include 'process-login-form.php';
include 'login-page.php';
?>
ファイル: Framework-init.php
<?php
//framework code here
include 'path/to/framework-code.php';
//uFlex code here
include 'path/to/uflex.php';
$user = new uFlex(false);
$user->db['host'] = 'dbhost';
$user->db['user'] = 'dbuser';
$user->db['pass'] = 'dbpass';
$user->db['name'] = 'dbname';
$user->start();
?>
ファイル: process-login-form.php
<?php
if ($_POST['action'] == 'login') {
$user->login($_POST['username'], $_POST['password'], $_POST['auto']);
if ($user->signed) { header('Location: http://mysite.com/dashboard/'); }
else {
//handle error logging in here
}
}
?>
ファイル: login-page.php
<form method="post" action="">
<input type="hidden" name="action" value="login">
<label>Username:</label>
<input type="text" name="username" />
<br>
<label>Password:</label>
<input type="password" name="password" />
<br>
<label>Remember me?:</label>
<input type="checkbox" name="auto" />
<br>
<input type="submit" value="login" />
</form>
これはエラーです:
Fatal error: Call to a member function login() on a non-object in /path/to/login.process.php on line 18
エラーは、ファイル process-login-form.php のこの行で発生します。
$user->login($_POST['username'], $_POST['password'], $_POST['auto']);
何が起きてる?フォームを送信するまでページは正常に読み込まれ、その後上記のエラーが返されます。
ただし、私の process-login-form.php ファイルが次のようになっている場合、これはエラーをスローしません。
<?php
// no need to include the uflex.php file here...
// it was already included with the framework-init.php file
$user = new uFlex(false);
$user->db['host'] = 'dbhost';
$user->db['user'] = 'dbuser';
$user->db['pass'] = 'dbpass';
$user->db['name'] = 'dbname';
$user->start();
if ($_POST['action'] == 'login') {
$user->login($_POST['username'], $_POST['password'], $_POST['auto']);
if ($user->signed) { header('Location: http://mysite.com/dashboard/'; }
else {
//handle error logging in here
}
}
?>
framework-init.php ファイルで既にインスタンス化されているオブジェクトを process-login-form.php ファイルで再度インスタンス化する必要があるのはなぜですか? これは私がOOPについて理解していないことですか?「post」メソッドを使用してフォームが送信されたときに表示されない変更はありますか?