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

[版本 3.x] 访问错误,但视图和控制器及方法都存在

[复制链接]
发表于 2016-1-22 15:11:48 | 显示全部楼层 |阅读模式
我将我的代码更新到万网的虚拟主机中,目录结构和本地一致。
我在route.php中配置的默认控制器是Welcome,整个这个控制器中的方法对应的视图都可访问。但在登录方法(login)中进行验证登录成功后的跳转确提示:
An Error Was Encountered
Unable to load the requested file: Admin/ancestral.php
login方法对应的视图,验证的控制器为User中的login方法,具体代码如下:
PHP复制代码
 
$this->load->helper('url');
 $this->load->helper('form');
    $this->load->library('form_validation');
 
 $this->form_validation->set_rules('email', 'Email', 'required');
 $this->form_validation->set_rules('pwd', 'Password', 'required');
 $data['email'] = $this->input->post('email');
 $data['pwd'] = $this->input->post('pwd');
   
    if ($this->form_validation->run() === FALSE)
    {
        $this->load->helper('url');
  $this->load->view('templates/header');
        $this->load->view('login');
        $this->load->view('templates/footer');
    }
    else
    {
 
        $data['user'] = $this->User_model->check_login($data);
  if (empty($data['user']))
  {
   $data['type'] = '登录失败';
   $data['info'] = '账号或密码错误';
   $this->load->view('templates/header');
   $this->load->view('login_failure',$data);
   $this->load->view('templates/footer');
  }
  else{
   //设置session
   $sessiondata = array(
   'name'  => $data['user']['user_name'],
   'email'     => $data['user']['user_email'],
   'phone' => $data['user']['user_phone'],
   'logged_in' => TRUE
   );
   
   $this->session->set_userdata($sessiondata);
   redirect('Admin'); // 預設讀取 index 方法
  }
 
 }
 
复制代码


登录验证后,便出现上面的错误提示,没有找到Admin/index.php
而我在控制器中有一个叫Admin的,视图中的一个admin/index.php文件,为何会提示找不到,加载不了呢?是什么原因,求教。

 楼主| 发表于 2016-1-22 15:15:36 | 显示全部楼层
Admin控制器中的index方法代码如下:
PHP复制代码
 
public function index($page = 'index')
    {
                if ( ! file_exists(APPPATH.'/views/admin/'.$page.'.php'))
    {
        // Whoops, we don't have a page for that!
        show_404();
    }
 
    $data['title'] = ucfirst($page); // Capitalize the first letter
        if(empty($this->session->userdata('name')))
                {
 
                        $this->load->view('templates/header');
                        $this->load->view('welcome_message');
                        $this->load->view('templates/footer');
                }
                else
                {
        $this->load->view('templates/header_admin',$data);
        $this->load->view('Admin/index');
        $this->load->view('templates/footer_admin');
                }
    }
 
复制代码
 楼主| 发表于 2016-1-22 17:38:32 | 显示全部楼层
本帖最后由 developerm 于 2016-1-22 17:44 编辑
Closer 发表于 2016-1-22 17:34
你的 index.php 有放入下列代碼嗎 ?

你是说Admin控制器中吗?如果是,则有放这段代码的

你看是否是index方法有问题?


PHP复制代码
 
<?php
class Admin extends CI_Controller {
    public function __construct()
    {
        parent::__construct();
        $this->load->helper('url');
        $this->load->helper('url_helper');
  $this->load->library('session');//加载session类
    }
 
 public function index($page = 'index')
    {
  if ( ! file_exists(APPPATH.'/views/admin/'.$page.'.php'))
    {
        // Whoops, we don't have a page for that!
        show_404();
    }
    $data['title'] = ucfirst($page); // Capitalize the first letter
 if(empty($this->session->userdata('name')))
  {
   $this->load->view('templates/header');
   $this->load->view('welcome_message');
   $this->load->view('templates/footer');
  }
  else
  {
 $this->load->view('templates/header_admin',$data);
 $this->load->view('Admin/index');
 $this->load->view('templates/footer_admin');
  }
    }
 
复制代码


复制代码
 楼主| 发表于 2016-1-22 18:30:18 | 显示全部楼层
本帖最后由 developerm 于 2016-1-22 22:48 编辑

我刚把整个Admin的控制器代码注释掉,只留下以下代码:
PHP复制代码
 
<?php
class Admin extends CI_Controller {
 
    public function __construct()
    {
        parent::__construct();
        $this->load->helper('url');
        $this->load->helper('url_helper');
                $this->load->library('session');//加载session类
    }
        public function index()
        {
                $this->load->view('templates/header_admin',$data);
                $this->load->view('Admin/index');
                $this->load->view('templates/footer_admin');
        }

 
复制代码


此时会提示以下错误:
A PHP Error was encountered
Severity: Notice
Message: Undefined variable: data
Filename: controllers/Admin.php
Line Number: 13
Backtrace:
 楼主| 发表于 2016-1-22 15:14:35 | 显示全部楼层
直接访问(http://www.xx.cn/Admin/index)控制器加方法也一样的提示

发表于 2016-1-22 15:17:28 | 显示全部楼层
當你前往 Admin 時
應該不會自動導向 index.php
所以你還要另外在 route.php 內設定

或是直接給它完整路徑
redirect('Admin/index');
发表于 2016-1-22 15:20:29 | 显示全部楼层
能否提供 route.php 的代碼?
 楼主| 发表于 2016-1-22 15:21:49 | 显示全部楼层
本帖最后由 developerm 于 2016-1-22 15:32 编辑
Closer 发表于 2016-1-22 15:20
能否提供 route.php 的代碼?

  1. defined('BASEPATH') OR exit('No direct script access allowed');
  2. $route['default_controller'] = 'welcome';
  3. $route['404_override'] = '';
  4. $route['translate_uri_dashes'] = FALSE;
复制代码


其他的都是注释掉的

环境是php5.5,ci是3.2
发表于 2016-1-22 15:39:36 | 显示全部楼层
本帖最后由 Closer 于 2016-1-22 15:41 编辑

我本來懷疑你 route 有重新定位路徑
但實際上又沒改

因為你的
An Error Was Encountered
Unable to load the requested file: Admin/ancestral.php
是說找不到 Admin 底下的 ancestral.php 檔

你 login 成功登入後
導向的網址是 ?

另外可以試試看 redirect('Admin/index'); 或 redirect( site_url('Admin/index') );

$this->load->helper('url'); 多載入了一次
 
 楼主| 发表于 2016-1-22 15:55:06 | 显示全部楼层
本帖最后由 developerm 于 2016-1-22 15:59 编辑
Closer 发表于 2016-1-22 15:39
我本來懷疑你 route 有重新定位路徑
但實際上又沒改

登录后,我想进入的就是Admin控制器的index方法对应的admin/index.php页
我设置
redirect('Admin/index');
redirect(site_url('Admin/index'));
这样都不可以,还是一样的提示

多加载的那句已删除掉
发表于 2016-1-22 16:02:07 | 显示全部楼层
本帖最后由 Closer 于 2016-1-22 16:03 编辑
developerm 发表于 2016-1-22 15:55
登录后,我想进入的就是Admin控制器的index方法对应的admin/index.php页
我设置
redirect('Admin/index'); ...

我是問說提供你上方的網址列
看是導向哪裡去

另外
錯誤訊息還是一樣這個 ?
An Error Was Encountered
Unable to load the requested file: Admin/ancestral.php

不太可能直接跟你說找不到 ancestral.php
肯定是你哪邊試圖想載入它

 
 楼主| 发表于 2016-1-22 17:28:36 | 显示全部楼层
Closer 发表于 2016-1-22 16:02
我是問說提供你上方的網址列
看是導向哪裡去

你是说我具体的网址吗?

index是我在login登录验证成功后要跳转的地方。这里会出现Unable to load the requested file: Admin/index.php

ancestral是我直接访问的一个测试,直接访问时会出现Unable to load the requested file: Admin/ancestral.php

本版积分规则