【问题标题】:How do I pass a variable to a controller function from the view in CodeIgniter?如何从 CodeIgniter 的视图中将变量传递给控制器​​函数?
【发布时间】:2019-04-09 20:25:16
【问题描述】:

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

  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。我做错了什么?

【问题讨论】:

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


    【解决方案1】:

    个人意见,但我认为没有任何充分的理由使用路线。如果不出意外,下面将是一个很好的实验,看看$route定义是否有问题。

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

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

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

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

    假设您验证了$agentName 是一个可用值之前您在链接中使用它。如果上面显示了一个值,那么您就知道$route 是问题所在。

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

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

    如果您找到一条可行的路线 - 并且使用一条路线是您真正想要的 - 然后将 agentexport 中的代码恢复为您真正需要的。但同样,我看不出有什么强烈的理由来混淆链接的 URL。

    【讨论】:

    • 非常感谢。正是我想要的。
    【解决方案2】:

    如果从视图中,您指向/controller_name/method/agent_name(这基本上是您在路由“翻译”之后所做的,您需要做的就是使用 URL 帮助程序从 URI 中选择代理名称(记得提前加载)

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

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

    【讨论】:

    • 感谢您的帮助。想知道我的路线是否定义明确。我应该将它定义为 $route['agentexport/:any'] = "user/agentexport";或 $route['agentexport'] = "user/agentexport?:any"; ?
    • 如果您必须使用路由(而不仅仅是链接到user/agentexport),您应该按照 CI 手册中的说明进行操作。 $route['agentexport/(:any)'] = 'user/agentexport/$1'; 以便将参数作为变量传递给函数。我不确定您是否会因为匹配的模式(agentexport)和目标路由相同(从未尝试过)而遇到问题......
    • 由于某种原因,我无法访问控制器函数中的代理名称。我试过 print_r 和 echo
    • 你能print "&lt;pre&gt;".print_r($this-&gt;uri-&gt;segment(3), true)."&lt;/pre&gt;";分享输出吗?
    • 首先我的链接网址不起作用。您是否看到我的路线定义和链接之间有任何错误?我试图什至没有路线,但只有功能链接到 user/agentexport 。如何通过将 agent_name 作为参数传递给控制器​​函数来做到这一点?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-30
    • 1970-01-01
    • 2020-02-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多