清洁方式来编写网址而不是连接

时间:2012-12-05 22:11:43

标签: php codeigniter

我发现自己正在做这样的网址:

$link = base_url('post') . '/' . $post_id . '/' . $slug . '/page/' . $page_num;

形成http://example.com/post/10/some-post-name/page/1

毋庸置疑,它非常混乱,但我想不出另类?是否有更好的方法在其中编写带变量的链接?

如果存在涉及它的解决方案,我将使用Codeigniter作为框架。

4 个答案:

答案 0 :(得分:3)

你有几种方法:

首先,通过sprintf:

sprintf('%s/%s/%s/page/%s', base_url('post'), $post_id, $slug, $page_num);

或通过阵列内爆:

implode('/', array(base_url('post'), $post_id, $slug, 'page', $page_num));

或者,如果将所有值都放入变量中,则可以利用字符串插值。

$url = ...;
...
"$url/$post_id/$slug/page/$page_num";

考虑到变量赋值块时,最后一个会更长,但它将简洁性与可读性结合起来。

答案 1 :(得分:2)

使用sprintf

$link = sprintf('%s/%d/%s/page/%d', base_url('post'), $post_id, $slug, $page_num);

答案 2 :(得分:1)

你可以这样做:

$link = site_url("post/{$post_id}/{$slug}/page/{$page_num}");

您确实应该使用site_url()代替base_url()来进行CI链接。 base_url()适用于非CI资产,例如图像和CSS。

site_url()将指向正确的前端控制器路径,因此您可以随意更新配置,使用它构建路径的所有内容都将相应更新。

我修改了我的答案。使用curly brace notation并避免使用额外的功能。您可以将一组参数传递给函数,如下所示:

$link = site_url(array('post', $post_id, $slug, 'page', $page_num));

但使用数组速度较慢。如果您需要动态构建网址,这可能很有用。

答案 3 :(得分:0)

你可以用老式的方式做功能!

function buildlink($base_url,$post_id,$slug,$page_num)
{
  return $base_url . '/' . $post_id . '/' . $slug . '/page/' . $page_num;
}

像这样称呼它

$link = buildlink(base_url('post') ,$post_id, $slug ,$page_num);

但也许我错过了什么