如何从CodeIgniter中的视图将变量传递给控制器​​功能?

时间:2018-11-06 12:31:43

标签: codeigniter model-view-controller routes parameter-passing

我有一个具有agentexport功能的用户控制器,应该可以下载一个excell电子表格。下面是函数:

  function agentexport($agentName) {
    if($this->isAdmin() == TRUE) {
        $this->loadThis();
    }
    else {
        $this->excel->setActiveSheetIndex(0);
        // Gets all the data using agent name
        $data = $this->excel_model->getdatabyname($agentname);

        //print_r($data);
        //die;

        $this->excel->stream('crosstown.xls', $data);
     }
}

在我看来,我正在尝试通过以下按钮执行上述功能:

<a class="btn btn-sm btn-info" href="<?php echo base_url().'agentexport/'.$record->agentName; ?>" title="Download Sheet><i class="fa fa-pencil"></i>Download Sheet</a>

以上按钮用于立即下载电子表格。 该网址在我的路线中定义为:

$route['agentexport'] = "user/agentexport";

我是否以正确的方式定义路线?当我点击路线时,我得到以下网址  http://www.XXXXX.com/John%20Grisham。 如您所见,名称被附加在url的末尾,但页面显示404。我在做什么错了?

2 个答案:

答案 0 :(得分:1)

个人观点在这里,但我认为没有充分的理由使用路线。如果没有其他问题,下面将是一个很好的实验,以查看$route定义是否有问题。

  1. 删除您一直用于“ agentexport”的$route
  2. 将链接更改为

<a class="btn btn-sm btn-info" href="<?= base_url('user/agentexport/'.$record->agentName); ?>" title="Download Sheet"><i class="fa fa-pencil"></i>Download Sheet</a>

要测试链接是否有效并且正在传递值,请使用以下版本的agentexport

public function agentexport($agentName)
{
    echo $agentName;
    //or alternately
    //var_dump($agentName);
}

假定您在链接中使用$agentName之前是可用的值 。如果上述内容为您提供了一个值,那么您就知道$route是问题所在。

您可以尝试找到$route,但是$route['agentexport/(:any)'] = 'user/agentexport/$1'; 应该有效。如果您要切换回使用路由,请不要忘记还原链接代码。我会这样写,将URI作为参数传递给base_url

<a class="btn btn-sm btn-info" href="<?= base_url('agentexport/'.$record->agentName); ?>" title="Download Sheet"><i class="fa fa-pencil"></i>Download Sheet</a>

如果找到一条可行的路由-并且确实要使用一条路由-然后将agentexport中的代码恢复为实际需要。但同样,我没有任何明显的理由混淆链接的URL。

答案 1 :(得分:0)

如果从视图中指向/controller_name/method/agent_name(这基本上是在路由“翻译”之后要做的事情,那么您要做的就是使用URI从URI中选择代理名称) URL助手(记住要事先加载)

$user_id = $this->uri->segment(3);

以上内容将采用URI第三段(在我的示例中为agent_name)中的任何内容,并将其分配给$user_id变量。 请记住,任何可能由用户操作的东西都不可信任,因此您需要清理$user_id并确保允许请求文件的用户访问它