【问题标题】:$user->email cannot be accessed from controller , only works on view$user->email 无法从控制器访问,仅适用于视图
【发布时间】:2017-08-02 02:04:13
【问题描述】:

我正在处理会话数据,当用户在杂货店杂货表中输入新记录时,电子邮件会自动加载。在页面顶部,可以使用(在视图文件夹中)显示当前用户的姓名/电子邮件

<?php echo $user->email;?>

但是,当我尝试在 GC 控制器中使用 $user->email 时,即使在分配给变量之后也会出现错误。还尝试使用 set_userdata 更改模型,但仍然无法正常工作。代码如下

错误

消息:未定义变量:用户

消息:试图获取非对象的属性

型号

public function takeUser($username, $password)

{

  $this->db->select('*');
  $this->db->from('user');
  $this->db->where('username', $username);
  $this->db->where('password', $password);
  $query = $this->db->get();
  return $query->num_rows();

}

public function userData($username)
{

  $this->db->select('username');
  $this->db->select('name');
  $this->db->select('email');
  $this->db->where('username', $username);
  $query = $this->db->get('user');
  return $query->row();
}

控制器

public function program()
{
if($this->session->userdata('isLogin') == FALSE)
{
    redirect('login/login_form');
}
else
{

    $this->load->model('m_login');
    $user = $this->session->userdata('username');
    $data['level'] = $this->session->userdata('level');
    $data['user'] = $this->m_login->userData($user);
}
    $crud = new grocery_CRUD();
    $crud->set_table('program');
       $crud>columns('nama_program','kod_program','kos_program','rmk','rollingplan','user','email');
    $crud>field_type('nama_program','kod_program','kos_program','rmk','rollingplan','user','email');
    $crud>set_relation('rollingplan','rollingplan','nama_rollingplan');
    $crud->callback_field('user',array($this,'user_field'));
    $crud->callback_field('email',array($this,'email_field'));
    $crud->set_subject('Program Baru');    
    $crud->required_fields('nama_program');
    $output = $crud->render();
    $this->_example_output_prog($output);
}

function user_field($value = '', $primary_key = null)
{
    return '<input type="text" maxlength="50" readonly="readonly"     value="'.$this->session->userdata('username').'" name="user"     style="width:462px">';
}
function email_field($value = '', $primary_key = null)
{ 
    $mail=$user->email;
    return '<input type="text" maxlength="50" readonly="readonly"      value="'.$mail.'" name="email" style="width:462px">';
}

【问题讨论】:

  • 你必须检查这行:$user = $this-&gt;session-&gt;userdata('username'); $data['level'] = $this-&gt;session-&gt;userdata('level'); $data['user'] = $this-&gt;m_login-&gt;userData($user);} 因为你在 Controller 中调用 $user 并将 $data['user'] 发送到 View,所以 View 会理解 $user 是 $data['user'] = $this-&gt;m_login-&gt;userData($user);,不是Controller中的用户 $user = $this-&gt;session-&gt;userdata('username');

标签: php codeigniter grocery-crud


【解决方案1】:
$this->load->model('m_login');
$user='';
if($this->session->userdata('username'))
{
    $user = $this->session->userdata('username');
    $data['level'] = $this->session->userdata('level');
    $data['user'] = $this->m_login->userData($user);
}
else
{
    //session expired or not created.
}

用空白初始化 $user 并检查会话变量是否存在。

【讨论】:

    【解决方案2】:

    如果您使用的是 PHP 5.4 或更高版本(我认为它适用于 PHP 5.3 但不确定),您可以使用匿名函数和 use 关键字轻松做到这一点。更具体地说,您可以这样做:

    public function program() {
        ...
        $crud->callback_field('email',function ($value, $primary_key) use ($user) { 
            return '<input type="text" maxlength="50" readonly="readonly" value="'.$user.'" name="email" style="width:462px">';
        });
        ...
    }
    

    用上面的方式:

    1. 回调在您的函数中,无需搜索
    2. 您的代码更清晰
    3. 它可以按您的预期工作:)

    【讨论】:

    • 导致错误:解析错误:语法错误,意外'$crud' (T_VARIABLE)
    • 对不起,我确实编辑了我的答案。我忘了在末尾添加);
    • 消息:尝试获取非对象属性的错误出现在 $mail = $user->email;
    • 哦,好吧...尝试使用 $user :) 我正在再次编辑我的答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-07
    • 1970-01-01
    • 2019-06-01
    • 2018-12-27
    • 2016-02-02
    • 1970-01-01
    相关资源
    最近更新 更多