【问题标题】:Clean way to write urls instead of concatenation编写 url 而不是串联的简洁方法
【发布时间】:2012-12-06 07:01:01
【问题描述】:

我发现自己在做这样的 URL:

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

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

不用说,它很乱,但我想不出替代方案?有没有更好的方法来编写带有变量的链接?

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

【问题讨论】:

  • 你可以使用双引号 ("")?
  • 双引号在我看来是最好的,并且是所有替代方案中最快的......只有您的代码在速度上胜过双引号。 stackoverflow.com/questions/3316060/…
  • 嘿——它实际上比任何发布的替代品更容易阅读——而且它是最快的。但是使用 site_url() 是肯定的,这是一个很好的收获——双引号会更容易阅读。

标签: php codeigniter


【解决方案1】:

你有几种方法:

首先,通过 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";

当您考虑到变量赋值块时,最后一个更长,但它结合了简洁性和可读性。

【讨论】:

【解决方案2】:

使用sprintf:

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

【讨论】:

    【解决方案3】:

    你可以这样做:

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

    对于 CI 链接,您确实应该使用 site_url() 而不是 base_url()base_url() 适用于非 CI 资产,例如图像和 css。

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

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

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

    但是使用数组比较慢。不过,如果您需要动态构建 url,这会很有用。

    【讨论】:

      【解决方案4】:

      你可以用一个老式的方法来做!

      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);
      

      但也许我错过了什么

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-12-06
        • 2014-10-02
        • 2014-01-26
        相关资源
        最近更新 更多