Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从url隐藏codeigniter控制器和方法名称_Php_Codeigniter - Fatal编程技术网

Php 从url隐藏codeigniter控制器和方法名称

Php 从url隐藏codeigniter控制器和方法名称,php,codeigniter,Php,Codeigniter,我的url是这样的:http://example.com/controller/method/param1/param2/param3/param4 <div class="post-content"> <ul> <?php foreach( $query->result() as $post ) : ?> <li><a href="<?php echo site_url($post->

我的url是这样的:
http://example.com/controller/method/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>
我的目标是:
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>
这里是我的控制器“主页”和“读取”。我还在底部包括我的视图和路由配置

<?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');
        }

    }
当我定义控制器名称时,这没有问题。但我不知道我的单个帖子的url怎么只包含这四个参数

<?php echo site_url('read/'.$post->term_name.'/'.$post->term_id.'/'.$post->id.'/'.strtolower(url_title($post->title))); ?>
任何帮助和建议都将不胜感激


致以最诚挚的问候

您可以在
config/routes.php
中使用自定义的
路由
。比如说

    #http://example.com/controller_name/method_name/param1/param2/param3/param4

        $route['param1/param2/param3/param4'] = 'controller_name/method_name';

       #Instead of -> 
#http://example.com/controller_name/method_name/param1/param2/param3/param4
      # Display -> http://example.com/param1/param2/param3/param4

检查您可以放置在下一路线的文档:

$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';
或者如果您正在传递数字/整数

$route['(:num)/(:num)/(:num)/(:num)'] = 'controller/method/$1/$2/$3/$4';
您也不能忘记将参数传递给您的方法,即使是FALSE

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

非常感谢@Tpojka,您的解决方案非常有效。现在,当我从urlEdited中删除一个参数时,发生了404重定向。请注意,通配符占位符位于已知路由之后。若答案是有效的,你们可以接受它,让它可以从引擎中搜索。你是说根据我的目标,
$route['param1/param2/param3/param4']
类似于
$route['(:any)/(:num)/(:num)/(:any)]