hai*_*ets 4 php oop codeigniter
我试图为我的控制器创建一个构造函数,该构造函数引用一个我自动加载的帮助程序中包含的函数.
该功能检查用户是否已登录,如果是,则将其重定向到登录页面.
看来我没有正确设置构造,因为我收到以下错误:
Fatal error: Call to undefined method Profile::is_logged_in()
Run Code Online (Sandbox Code Playgroud)
这是控制器:
<?php
if (!defined('BASEPATH'))
exit('No direct script access allowed');
class Profile extends CI_Controller {
public function __construct()
{
parent::__construct();
//function inside autoloaded helper, check if user is logged in, if not redirects to login page
$this->is_logged_in();
}
public function index() {
echo 'hello';
}
}
Run Code Online (Sandbox Code Playgroud)
我只想在用户登录时使控制器内的功能可访问.
这是自动加载的帮助程序
$autoload['helper'] = array('url','array','html','breadcrumb','form','function','accesscontrol');
Run Code Online (Sandbox Code Playgroud)
(accesscontrol_helper.php):
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
function is_logged_in()
{
$is_logged_in = $this->session->userdata('is_logged_in');
if(!isset($is_logged_in) || $is_logged_in != true)
{
echo 'You don\'t have permission to access this page. <a href="../login">Login</a>';
die();
//$this->load->view('login_form');
}
}
Run Code Online (Sandbox Code Playgroud)
为什么我无法运行该功能?包含帮助程序中的代码是最好的方法吗?
正如其他已经提到的那样,帮助程序只是函数的集合.扩展它们:
此外,您无法在不首先实例化主CI对象的情况下调用其中的CI类.这是使用辅助函数的更合适的方法:
if(!function_exists('is_logged_in'))
{
function is_logged_in()
{
$CI =& get_instance();
$is_logged_in = $CI->session->userdata('is_logged_in');
if(!isset($is_logged_in) || $is_logged_in != true)
{
echo 'You don\'t have permission to access this page. <a href="../login">Login</a>';
die();
}
}
}
Run Code Online (Sandbox Code Playgroud)我也会让它返回而不是echo移动die()到控制器,但这是另一个故事.
| 归档时间: |
|
| 查看次数: |
15571 次 |
| 最近记录: |