用户
 找回密码
 入住 CI 中国社区
搜索
查看: 5240|回复: 11
收起左侧

[HELP] 着急,有关自定义辅助函数的问题

[复制链接]
发表于 2011-7-24 13:20:03 | 显示全部楼层 |阅读模式
article.php 控制器
PHP复制代码
 
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
 
class Article extends CI_Controller {
 
    function __construct()
    {
        parent::__construct();
        $this->load->helper('MY_others');
        is_logged_in('Article');
    }
 
复制代码


MY_others_helper.php 自定义辅助函数
PHP复制代码
 
<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
 
if ( ! function_exists('is_logged_in'))
{
    function is_logged_in($object)
    {
        $is_logged_in = $object->session->userdata('is_logged_in');
        if(!isset($is_logged_in) || $is_logged_in != true)
        {
            echo 'You don\'t have permission to access this page.&nbsp;';
            echo anchor('member/index','Login');    
            die();    
        }    
    }
}
 
复制代码


报错:
A PHP Error was encounteredSeverity: Notice
Message:  Trying to get property of non-object
Filename: helpers/MY_others_helper.php
Line Number: 19

( ! ) Fatal error: Call to a member function userdata() on a non-object in E:\xampp\htdocs\ci_volunteers\app\helpers\MY_others_helper.php on line 19

应该怎么改?

发表于 2011-7-24 13:23:35 | 显示全部楼层
文件命名问题。
你看下system/helpers/下的文件有大写字母开头的吗?
另外HELPER的不需要加MY_这个前缀。
 楼主| 发表于 2011-7-24 13:25:28 | 显示全部楼层
jeongee 发表于 2011-7-24 13:23
文件命名问题。
你看下system/helpers/下的文件有大写字母开头的吗?
另外HELPER的不需要加MY_这个前缀。 ...

是放在application/helpers下的,应该不是文件命名问题,因为该辅助函数里的另一个自定义函数是起作用的。
发表于 2011-7-24 13:29:47 | 显示全部楼层
phoenixg 发表于 2011-7-24 13:25
是放在application/helpers下的,应该不是文件命名问题,因为该辅助函数里的另一个自定义函数是起作用的 ...

哦,是你传进去的object变量有问题,你传的是类名的字符串。。。。怎么会有session。
让你的$object = & get_instance();吧
PS:你的文件命名会有问题的,你可能现在用的windows,它不区分大小写,如果你传到linux等下,就会报错了
 楼主| 发表于 2011-7-24 13:32:20 | 显示全部楼层
jeongee 发表于 2011-7-24 13:29
哦,是你传进去的object变量有问题,你传的是类名的字符串。。。。怎么会有session。
让你的$object = &  ...

谢谢超版!
还有以下不明

1 让你的$object = & get_instance();吧 要在哪里改啊
2 你的文件命名会有问题的,你可能现在用的windows,它不区分大小写,如果你传到linux等下,就会报错了。文件应该怎么命名才能在linux下正常呢?
发表于 2011-7-24 13:34:43 | 显示全部楼层
phoenixg 发表于 2011-7-24 13:32
谢谢超版!
还有以下不明

1.$object = & get_instance();当然是在你的helper函数里面了
2.首字母小写!
 楼主| 发表于 2011-7-24 13:35:39 | 显示全部楼层
jeongee 发表于 2011-7-24 13:34
1.$object = & get_instance();当然是在你的helper函数里面了
2.首字母小写!

万分感谢!
 楼主| 发表于 2011-7-24 13:44:37 | 显示全部楼层
这样是可以了,但我觉得每次都写$CI = & get_instance();是不是多余了,有否可能再改进下?

article.php控制器
PHP复制代码
 
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
 
class Article extends CI_Controller {
 
    function __construct()
    {
        parent::__construct();
        $this->load->helper('MY_others');
        $CI = & get_instance();
        is_logged_in($CI);
    }
 
复制代码


my_others_helper.php 自定义辅助函数(位于application/helpers下,已改成小写文件名)
PHP复制代码
 
if ( ! function_exists('is_logged_in'))
{
    function is_logged_in($CI)
    {
        $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.&nbsp;';
            echo anchor('member/index','Login');    
            die();    
        }    
    }
}
 
复制代码



发表于 2011-7-26 09:46:30 | 显示全部楼层
我勒个去,j是让你把代码写在helper里面,不是controller
 楼主| 发表于 2011-7-26 14:23:30 | 显示全部楼层
visvoy 发表于 2011-7-26 09:46
我勒个去,j是让你把代码写在helper里面,不是controller

弱弱问一句,那要怎么移动?

本版积分规则