すべてのコントローラーで変数 (PDO インスタンス) を使用できるようにしようとしています。私の application/core/MY_Controller.php には次のものがあります。
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class MY_Controller extends CI_Controller
{
public $pdo;
}
アプリケーション/コントローラー/login.php:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Login extends MY_Controller
{
public function index()
{
if(!$this->pdo instanceof PDO)
{
$this->load->view('login_form');
}
else
{
redirect('home');
}
}
public function connect()
{
$hostname = $this->input->post('hostname');
$username = $this->input->post('username');
$password = $this->input->post('password');
$this->pdo = new PDO("mysql:host=$hostname", $username, $password);
if($this->pdo instanceof PDO)
{
redirect('home');
}
else
{
$this->index();
}
}
}
アプリケーション/コントローラー/home.php:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Home extends MY_Controller
{
public function index()
{
echo 'PDO should be available here but it is not:';
print_r($this->pdo);
}
}
アプリケーション/ビュー/login_form.php:
<!DOCTYPE html>
<html lang="en">
<head>
<title>Login form</title>
</head>
<body>
<div>
<?php echo form_open('login/connect'); ?>
<label for="hostname">Hostname</label>
<input type="text" id="hostname" name="hostname" />
<label for="username">User name</label>
<input type="text" id="username" name="username" />
<label for="password">Password</label>
<input type="text" id="password" name="password" />
<input type="submit" id="submit" name="submit" />
<?php echo form_close(); ?>
</div>
</body>
これをローカルでテストしています。サイトのアドレスにアクセスすると、ログインフォームが期待どおりに表示されます。送信時に login::connect() が呼び出され、$this->pdo に PDO インスタンスが含まれていることがわかります (login::connect で print_r($this->pdo を使用すると、「PDO オブジェクト ( )」と表示されます)。 Home コントローラにリダイレクトします $this->pdo には PDO インスタンスが含まれていません。
私は何を間違っていますか?ホームコントローラーへのリダイレクトと関係がありますか? 前もって感謝します。