【问题标题】:Codeigniter passing parameter in get from view results in 404 errorCodeigniter 在 get from view 中传递参数导致 404 错误
【发布时间】:2020-01-16 10:08:52
【问题描述】:

我正在尝试将参数传递给我的函数,例如:

<a href="mydomain.com/admin/controller/functionxyz/parameter"> edit</a>

在我的控制器中

function  functionxyz($parameter=null){}

如果我在没有任何参数的情况下传递它会导致 404 错误到达函数。 我试过路由和 uri 段都没有工作。

更新: 当我在 url 中使用 get 时,它工作得非常好:

<a href="mydomain.com/admin/controller/functionxyz?parameter=abc"> edit</a>

只有当我尝试将函数作为参数传递时,我才会登陆 404 页面。

更新: 所以我的路线是这样的:

$route['cmcp/company/edit'] = 'cmcp/company/edit';
$route['cmcp/company/edit/(:any)'] = 'cmcp/company/edit/$1';

cmcp 是我的管理控制器,它扩展了一个名为 company 的控制器并具有编辑功能。

【问题讨论】:

    标签: php url-rewriting url-routing codeigniter-3


    【解决方案1】:

    您需要向路由器添加 2 个条目。一个没有任何参数,一个有参数,如下所示:

    $route['admin/controller/functionxyz'] = 'admin/controller/functionxyz';
    // for only 1 param
    $route['admin/controller/functionxyz/(:any)'] = 'admin/controller/functionxyz/$1';
    // for multiple params
    $route['admin/controller/functionxyz/(.+)'] = 'admin/controller/functionxyz/$1';
    

    【讨论】:

    • 谢谢,但我已经尝试过了,它仍然落在 404 页面上。
    • 您有 .htaccess 文件吗?如果有,您可以发布您的内容吗?
    • 谢谢 Mikey,我试过了,但它的 404 页面。是的,我也有 htaccess。我会分享我的代码。
    【解决方案2】:

    在目录 /application/controllers/admin/ 中给定一个名为 Home 的控制器,该控制器具有 public function xyz($param = null) ... 方法,最好的方法是使用 URI 的重新映射。但我们必须实际重新映射 URI。考虑到这一点,这些路线应该可以工作。 (请注意,$route 键和值确实不同。)

    $route['home'] = 'admin/home/xyz';
    $route['home/(.+)'] = 'admin/home/xyz/$1';
    

    所以链接应该是这样的

    <a href="example.com/home/parameter"> edit</a>
    

    IMO,以上是完全不必要的并发症。除非你是个控制狂或拥有数百个控制器,否则很少有正当理由破坏 CI 的 /class/function/id/ URI 模式。将控制器放在子文件夹中的唯一结果是让生活变得更加复杂。

    【讨论】:

    • 那么,如果我的控制器需要两个功能,一个用于编辑,另一个用于删除操作,或者我想传递更多参数,在这种情况下会发生什么?那么我的索引函数呢?
    • 如果您想为每个控制器/功能创建一个简单的 URL,那么您需要为每个组合创建路由。正则表达式 (.+) 会将所有找到的 URI 段(即更多参数)附加到 URL。
    【解决方案3】:

    您是否尝试过激活 helper 'url' 并使用 base_url 功能?

    <a href="<?php echo base_url('controller/functionxyz/').'parameter' ?>"> edit</a>
    

    【讨论】:

    • 其实我也试过没有anchor的,可能是我的设置有问题。
    【解决方案4】:

    替换

    <a href="mydomain.com/admin/controller/functionxyz/parameter"> edit</a>
    

    <?php echo anchor('controller/functionxyz/parameter','edit'); ?>
    

    看看会发生什么并给我反馈。 据我所知,没有必要为此编写路由规则。正如有人所说,这感觉就像一个控制狂。 而是尝试给参数一些默认值并相应地做一些事情。

    例子:

    function  functionxyz($parameter="notgiven"){
            if ($parameter == "notgiven"){
                //do something
            }else{
                //do what you want with the parameter
            }
        }
    

    【讨论】:

    • 它不是控制狂,我用它作为例子我的意思只是我登陆了 404 页面。当我尝试像这样在 url 中发送参数时,但是当我将它作为 get 发送时,它工作得非常好。我试过你的方法它仍然是 404
    • 首先想到的是您在配置文件中正确设置了基本网址吗?你也正确删除了 index.php 吗?
    • 如果您正在动态生成参数,请尝试
    • index.php 已被删除,并且基本 url 是正确的,因为我看到它在获取数据等方面工作。我的参数是动态的,但是当我使用这种方法时,它仍然是 404。因为我提到如果我传递参数让它工作正常。
    • $route['cmcp/company/edit'] = 'cmcp/company/edit'; $route['cmcp/company/edit/(:any)'] = 'cmcp/company/edit/$1';
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-19
    • 2016-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-04
    相关资源
    最近更新 更多