在网址中隐藏codeigniter控制器和方法名称 [英] Hide codeigniter both controller and method name from url

查看:36
本文介绍了在网址中隐藏codeigniter控制器和方法名称的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的网址是这样的: http://example.com/controller/method/param1/param2/param3/param4

我的目标是: http://example.com/param1/param2/param3/param4

在这里,我的控制器为"Home"和"Read".我还在底部包括了我的视图和路由配置.

Here my controllers 'Home' and 'Read'. I also include my view and route configuration at bottom.

<?php defined('BASEPATH') OR exit('No direct script access allowed');

class Home extends CI_Controller {

    public function __construct()
    {
        parent::__construct();
    }

    /*
    *   Index method
    */
    public function index() {

        $this->db->select('a.*, c.*');
        $this->db->join('category as c', 'c.catid=a.catid');
        $this->db->limit(10);
        $this->db->order_by('a.id', 'DESC');

        $data['query'] = $this->db->get('article as a');

        $this->load->view('header');
        $this->load->view('home_view', $data);
        $this->load->view('footer');
    }

}


<?php defined('BASEPATH') OR exit('No direct script access allowed');

    class Read extends CI_Controller {

        public function __construct()
        {
            parent::__construct();
        }

        /*
        *   Index method
        */
        public function index() {

            $id = isset($this->uri->segment(3)) ? $this->uri->segment(3) : FALSE;

            $this->db->select('a.*, c.*');
            $this->db->join('category as c', 'c.catid=a.catid');
            $this->db->where('p.id', $id);
            $this->db->limit(1);

            $data['query'] = $this->db->get('article as a');

            $this->load->view('header');
            $this->load->view('single_view', $data);
            $this->load->view('footer');
        }

    }

home_view.php

home_view.php

请在下面查看锚点,这是我生成 http://example.com/param1/param2/param3/param4

Please take a look at anchor below, that was my goal to produce http://example.com/param1/param2/param3/param4

<div class="post-content">
    <ul>
        <?php foreach( $query->result() as $post ) : ?>
        <li><a href="<?php echo site_url($post->term_name.'/'.$post->term_id.'/'.$post->id.'/'.strtolower(url_title($post->title))); ?>"><?php echo $post->title ?></a></li>
        <?php endforeach; ?>
    </ul>
</div>

当我定义控制器名称时,没问题.但是我不知道我的单个帖子的URL如何仅包含这四个参数

When I defined the controller name, it's no problem. But I can't figure out how my url for single post only contain those four params

<?php echo site_url('read/'.$post->term_name.'/'.$post->term_id.'/'.$post->id.'/'.strtolower(url_title($post->title))); ?>

在我的路由配置下面:

$route['(:any)'] = "read/index/$1";

任何帮助和建议将不胜感激.

Any help and advices will be appreciated.

最好的问候

推荐答案

检查可放置下一条路线的文档:

Checking the docs you can place next route:

$route['(:any)/(:any)/(:any)/(:any)'] = 'controller/method/$1/$2/$3/$4';
$route['(:any)/(:any)/(:any)'] = 'controller/method/$1/$2/$3';
$route['(:any)/(:any)'] = 'controller/method/$1/$2';

或者如果您要传递数字/整数

or if you are passing numbers/integers

$route['(:num)/(:num)/(:num)/(:num)'] = 'controller/method/$1/$2/$3/$4';

您也不要忘记将参数传递给您的方法,即使是FALSE也是如此.

You mustn't forget to pass arguments to your method as well, even as FALSE.

public function index($param1, $param2, $param3, $param4)
{
    //rest of code that is using params
}

这篇关于在网址中隐藏codeigniter控制器和方法名称的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆