Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.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 将单个或多个URI段传递给函数(代码点火器)_Php_Codeigniter_Uri - Fatal编程技术网

Php 将单个或多个URI段传递给函数(代码点火器)

Php 将单个或多个URI段传递给函数(代码点火器),php,codeigniter,uri,Php,Codeigniter,Uri,目前我有这个url来查看db(codeigniter)domain.com/view/id 我希望能够接受多个以逗号分隔的iddomain.com/view/id,id,id 你知道怎么做吗?谢谢 视图控制器部分: function view() { $id = alphaID($this->uri->segment(1) ,true); $this->load->model('Site_model'); if($query = $this-&

目前我有这个url来查看db(codeigniter)
domain.com/view/id

我希望能够接受多个以逗号分隔的id
domain.com/view/id,id,id

你知道怎么做吗?谢谢


视图控制器部分:

function view() {
    $id = alphaID($this->uri->segment(1) ,true);

    $this->load->model('Site_model');
    if($query = $this->Site_model->get_images($id)) {
        $data['records'] = $query;
    }   
    $this->load->view('view', $data);


}

<?php if(isset($records)) : foreach($records as $row) : ?>
    <?php if($row->alpha_id == $this->uri->segment(1)): ?>
        <h1><?php echo $row->alpha_id.$row->file_ext; ?></h1>
    <?php endif; ?>
    <?php endforeach; ?>
<?php endif; ?>
函数视图(){
$id=alphaID($this->uri->segment(1),true);
$this->load->model('Site_model');
如果($query=$this->Site\u model->get\u images($id)){
$data['records']=$query;
}   
$this->load->view('view',$data);
}

因为逗号不是有效的路径元素,所以如果不将分隔数据放在路径的右侧,您将无法使用它?性格你需要想出另一个方案或使用@jprofitt的评论。

你是对的,你可以在
$config['allowed_uri_chars']
中添加一个逗号,但除非你连接到系统核心,否则你必须在每次需要时使用该段进行操作

尚未测试此代码,但您将了解:

<?php

$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-,'; // Note a comma...

// Controller
class Blog extends CI_Controller
{

    public function posts($ids = NULL)
    {
        // Check if $ids is passed and contains a comma in the string
        if ($ids !== NULL AND strpos($ids, ',') !== FALSE)
        {
            $ids = explode(',', $ids);
        }

        // Convert $ids to array if it has no multiple ids
        is_array($ids) OR $ids = array($ids);

        // $ids is an array now...

    }

    public function new_posts()
    {
        // Check if $ids is passed and contains a comma in the string
        $ids = $this->uri->segment(1);
        if (!empty($ids) AND strpos($ids, ',') !== FALSE)
        {
            $ids = explode(',', $ids);
        }

        // Convert $ids to array if it has no multiple ids
        is_array($ids) OR $ids = array($ids);

        // $ids is an array now...

    }

}

?>

example.com/index.php/blog/posts/2,4,6,8


请再次注意,代码可能不准确,因为我还没有测试过它,但我认为它会帮助您。

在控制器中使用它

function view() {
    $id = $this->uri->segment(1);
    $id_array = explode(",", $id);
    $this->load->model('Site_model');
    foreach ($id_array as $key => $id) {
    // use alphaID function
    $id = alphaID($id ,true);
    if($query = $this->Site_model->get_images($id)) {
        $data['records_array'][$key] = $query;
    // added second array for comparison in view
        $data['id_array'][$key] = $id;
    } 
    }  
    $this->load->view('view', $data);
}
请注意:

<?php 
foreach ($records_array as $key => $records) {
if(isset($records)) : foreach($records as $row) : ?>
    // removed uri and added array
    <?php if($row->alpha_id == $id_array[$key]):    ?>
        <h1><?php echo $row->alpha_id.$row->file_ext; ?></h1>
    <?php endif; ?>
    <?php endforeach; ?>
<?php endif; 
}
?>

//删除uri并添加数组

你能把它作为
domain.com/view/id/id/id传递给我吗?并获取每个id的URI段吗?id像逗号分隔的或:符号,用于ocdreasons@user1072983将id作为视图/id/id/id传递是一种更好的方法。。。并使用php中的变量参数获取所有idsok,我将尝试这种方法。如果我通常使用$this->uri->segment(2)获取id;现在无限多个ID的可能性将如何改变?thanks@user1072983请添加到您的帖子中,您当前的视图模型和控制器的相关部分,我想我可以给您一个答案,但如果没有这些信息,它将非常抽象。如果我将它们添加到$config['allowed_uri_chars']?那么ci是否将$id作为一个包含内容为“2,4,6,8”的单个数组传递给函数帖子,而不是单独传递给每个id,干杯基本上是的。。。它就是这样做的。但这里有一个注意事项,它不是CI,而是您:)您将“2,4,6,8”作为
$ids
参数的值传递,此时此参数也是一个URI段。。。请看一下控制器文档:P.S.从一开始,
$ids
是一个值为“2,4,6,8”的字符串,只有在分解后才成为数组。请参阅上面更新的代码…好的,我知道了,最后我还会使用$this->uri->segment(1)来获取$id吗?您可能需要检查数组中的id是数字还是非数字。你可以使用is_数值函数。我的ID看起来像'i3eD'a-zA-Z0-9oh,那么is_数值函数显然不适合你:)嗨,这对我不起作用:/i我没有得到任何输出这是我的控制器函数:在视图中:你能看到任何明显的错误吗?FYI alphaID()将字母数字id转换为实际的db id,直到没有输出,除非url中只有一个id,非常混乱:s