2

基本上,我有两个控制器使用 CodeIgniter 为学校的一个项目编写一个简单的博客。一个是首页,即登录页面。另一个是当他们登录时的成员。在这个成员控制器中,我正在为 add_post()、view_users_posts() 等创建函数。 Member.php

class Member extends CI_Controller{

function __construct(){
    parent::__construct();
    $is_logged_in = $this->session->userdata('is_logged_in');
    if (!isset($is_logged_in) || $is_logged_in !== true) {
        redirect('home');
    }
}

public function index() {
    $this->load->library('pagination');

    $config['base_url'] = base_url() . 'index.php/member/index/';
    $config['total_rows'] = $this->db->get('posts')->num_rows();
    $config['per_page'] = 5;
    $config['num_links'] = 20;

    $this->pagination->initialize($config);

    $data['posts'] = $this->posts_model->get_all_posts($config['per_page'], $this->uri->segment(3));
    $this->load->view('member_view', $data);
}

public function add_post() {
    $this->load->view('add_post_view');
}

我的会员视图有一个导航菜单,其中包含指向这些功能的链接,如下所示:member_view.php

      <li><a href="member">Home</a></li>
      <li><a href="member/add_post">Add Post</a></li>
      <li><a href="member/view_users_posts">My Posts</a></li>
      <li><a href="member/reset_pass">Reset Password</a></li>
      <li><a href="member/logout">Logout</a></li>

我还没有完成它们,因为我不知道要编码什么。基本上,如果用户单击 Add Post,它是否应该引用控制器中的函数 add_post,该函数将加载一个名为 add_post 的视图?还是应该直接指向一个名为 Add_post 的新控制器来加载视图?

我的原因是,如果我点击添加帖子,它会将我带到成员/添加帖子,但是当我点击回家时,我得到成员/成员,然后再次添加帖子,我得到成员/成员/添加帖子。

我希望这是有道理的,我完全不知所措。谢谢你的帮助!

4

3 回答 3

4

你需要使用base url.

假设您的基本网址是(在配置中),www.example.com/

那么你的代码将是

<li><a href="<?php echo base_url('member/add_post');?>">Add Post</a></li>

对其他项目做同样的事情。

注意:记住配置文件中的斜线。否则将其包含在base_url('/member/add_post')

参考

于 2012-05-17T08:26:20.453 回答
0

你在正确的轨道上。对于您拥有的菜单项,您必须完成以下控制器功能:

class Member extends CI_Controller {

    function __construct()
    {
        parent::__construct();
        $is_logged_in = $this->session->userdata('is_logged_in');
        if (!isset($is_logged_in) || $is_logged_in !== true) {
            redirect('home');
    }

    function add_post()
    {
        // for example:
        $this->load->view('header');  // standard header and menu view
        $this->load->view('add_post');  // input form view
        $this->load->view('footer');   // standard footer, adverts, etc.
    }

    function view_users_posts()
    {
        $data ['posts'] = $this->model->get_all_posts( ...(etc)... );
        $this->load->view('header');  // standard header and menu view
        $this->load->view('view_users_posts', $data);
        $this->load->view('footer');   // standard footer, adverts, etc.
    }

    function reset_pass()
    {
        ...
    }

    function logout()
    {
        ...
    }
}

第一个新函数引用views/header.phpviews/add_post.phpviews/footer.php。其他“成员”函数可能也应该加载页眉和页脚(以获得一致的站点外观),但加载不同的主体功能,可能称为与函数非常相似的东西。

我假设view_users_posts()访问一些新的模型函数来检索帖子,将其传递给视图以适当地格式化。请注意,应该根据我上面编写的方式view/view_users_posts.php访问变量。$posts

于 2012-05-17T08:28:50.287 回答
0

前段时间我有同样的问题。我的解决方案是将基本 url 设置为 index.php 的路径。例如

$config['base_url'] = "http://localhost/codeigniter/index.php/"

所以你可以像这样使用它

<a href="<?php echo base_url() ?>Controller/Action/Param1/Param2">Link Text</a>
于 2012-05-17T11:35:42.193 回答