CodeIgniter 4 路由命名路由不会生成 href

codeigniter 4 routing named routes generates no href

提问人:guradio 提问时间:4/26/2020 最后编辑:guradio 更新时间:4/27/2020 访问量:669

问:

我有一条应该为锚标记生成 href 的路由,但我没有得到 href:

<a href="" style="color:white !important" class="btn btn-info postlist">Update</a>

我上面的代码是:

data[i]["confirm"] = '<a href="<?=route_to('updatePost', 1) ?>" style="color:white !important" class="btn btn-info postlist">Update</a>';

我的路线是:

//$routes->add('post/(:id)', 'App/Controllers/Post::updatepost/$1');
$routes->add('post/(:id)', 'Post::updatepost/$1', ['as' => 'updatePost']);

我期待这样的事情

注意:尝试了未命名和命名的方式,两者都没有生成任何 href

路由 href codeigniter-4 named-routing

评论

1赞 TimBrownlaw 4/26/2020
甚至他们的例子(有错别字)也不起作用。似乎在您添加 (:id) 和朋友的那一刻,它会抛出一个错误。我必须深入研究代码,但我现在有点忙。如果你让它像 /post 一样简单,那就有效了
0赞 TimBrownlaw 4/26/2020
(:any) 有效。你试过吗,是的,我还没有完全放弃:)
0赞 TimBrownlaw 4/26/2020
请注意,您非常确定 data[i][“confirm”] = “ link code ”。这是否意味着$data[$i]['确认']?
0赞 guradio 4/27/2020
@TimBrownlaw我在这里学习,尤其是路由,我需要改进这部分。 至于索引,它不是......我还没有尝试过这个,我会尝试这个,我需要专注于另一个答案:)i$i

答:

1赞 TimBrownlaw 4/26/2020 #1

简短的回答是不支持 (:id)。它已被弃用,取而代之的是使用 (:num)

所以快速的解决方法是使用 (:num) 而不是 (:id)

这是一样的。

临时修复是更改核心文件,如果您真的真的需要的话。

免责声明:强烈建议不要更改核心文件。 这样做的风险由您自己承担

在文件 /system/Router/RouteCollection 中.php - 第 117 行

是:

/**
 * Defined placeholders that can be used
 * within the
 *
 * @var array
 */
protected $placeholders = [
    'any'      => '.*',
    'segment'  => '[^/]+',
    'alphanum' => '[a-zA-Z0-9]+',
    'num'      => '[0-9]+',
    'alpha'    => '[a-zA-Z]+',
    'hash'     => '[^/]+',
];

如果您真的需要它,它可能是:

/**
 * Defined placeholders that can be used
 * within the
 *
 * @var array
 */
protected $placeholders = [
    'any'      => '.*',
    'segment'  => '[^/]+',
    'alphanum' => '[a-zA-Z0-9]+',
    'num'      => '[0-9]+',
    'alpha'    => '[a-zA-Z]+',
    'hash'     => '[^/]+',
    'id'       => '[0-9]+'
];

更改是添加模仿“num”“id”条目。

简单地将对 (:id) 的所有引用更改为 (:num) 会更安全

评论

0赞 guradio 4/27/2020
明白了。。它就像 :id 是一个保留词?或者类似的东西?我不是这么想的。一旦我完成另一个,就会尝试这个:)快乐的编码伙伴..你帮了我很大的忙,我很感激
1赞 TimBrownlaw 4/27/2020
我认为它已被弃用,转而使用 (:num),因为它是 (:id) 的本意,并且它在文档中是“剩余的”......在我们说话的时候,我正在添加错误报告。
0赞 guradio 4/27/2020
我看到注意到了这一点.我想知道为什么它不起作用。版本中仍然存在一些错误。你推荐它用于生产吗?
1赞 TimBrownlaw 4/27/2020
好吧,我正在做一个要发布的项目。到目前为止还不错。只需将 (:id) 更改为 (:num) 即可完成...我明白为什么它被故意删除了。它只是在文档中徘徊。我有点喜欢它,并且会回到 CI 3 进行畏缩攻击。另外,如果有任何错误 - 它们将被分类。你在寻找“问题”方面做得很好:)
1赞 TimBrownlaw 4/27/2020
好吧,我们今天都学到了一些新东西。如果你从来没有问过,我就不会发现这些东西:)