Laravel 5 link_to_* 与 icon/html

Laravel 5 link_to_* with icon/html

有人知道如何将 HTML 放入 link_to_* 辅助函数的 $title 参数中吗?

我一直在谷歌搜索并直接在 laravel.io 上找到了一些关于它的主题,但只有建议:

  1. 制作你自己的助手(试过但最后我使用 link_to_* 或 App::make('html')->linkRoute(...); 示例 helpers.
  2. 在视图中生成链接并使用 URL facade
  3. 使用HTML facade 对视图中的链接进行编码(我认为这不安全,不知道为什么总感觉不对)。

为了让自己清楚,我在问 如何使 1. 建议起作用?(我尝试了助手,但使用 L5 助手 link_to_route('some.route', 'This is title with icon <i class="icon"></i>'); 和助手时结果相同我做的(下面的代码)。哪里 $icon = '<i class="some-icon"></i>';

if ( ! function_exists('link_to_route_icon'))
{

    function link_to_route_icon($name, $title = null, $icon = null,  $parameters = array(), $attributes = array())
    {
        return app('html')->linkRoute($name, $title . $icon, $parameters, $attributes);
    } 
}

两者(我自己的助手或L5助手)输出相同的结果:

解决方案

if ( ! function_exists('link_to_route_icon'))
{

    function link_to_route_icon($name, $title = null, $icon = null, $parameters = array(), $attributes = array())
    {
        $url = route($name, $parameters);

        return '<a href="' . $url . '"' . app('html')->attributes($attributes) . '>' . htmlentities($title) . ' ' . $icon . '</a>';
    }
}

请注意,当使用 L5 并且您想使用自己的 helper.php 时,您必须在 composer.json

中加载它
"psr-4": {
    "App\": "app/"
},
"files": [
    "app/Helpers.php"
]

问题是您使用的 linkRoute 方法最终会在传递的标题字符串上调用 htmlentities。您必须自己构建 HTML 才能使其正常工作。这是一个通用示例(为了生成图标链接,请随意对其进行更多优化)

function link_to_route_html($name, $html, $parameters = array(), $attributes = array())
{
    $url = route($name, $parameters);
    return '<a href="'.$url.'"'.app('html')->attributes($attributes).'>'.$html.'</a>';
} 

然后你这样称呼它:

link_to_route_html('some.route', 'This is title with icon <i class="icon"></i>');