Laravel 5 link_to_* 与 icon/html
Laravel 5 link_to_* with icon/html
有人知道如何将 HTML 放入 link_to_* 辅助函数的 $title 参数中吗?
我一直在谷歌搜索并直接在 laravel.io 上找到了一些关于它的主题,但只有建议:
- 制作你自己的助手(试过但最后我使用 link_to_* 或
App::make('html')->linkRoute(...);
示例 helpers.
- 在视图中生成链接并使用 URL facade
- 使用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助手)输出相同的结果:
在浏览器中可见:name<i class="fa-sort-alpha-asc"></i>
html代码:<a href="http://acme.dev/dashboard/users?order=desc&sort=name">name<i class="fa-sort-alpha-asc"></i></a>
解决方案
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>');
有人知道如何将 HTML 放入 link_to_* 辅助函数的 $title 参数中吗?
我一直在谷歌搜索并直接在 laravel.io 上找到了一些关于它的主题,但只有建议:
- 制作你自己的助手(试过但最后我使用 link_to_* 或
App::make('html')->linkRoute(...);
示例 helpers. - 在视图中生成链接并使用 URL facade
- 使用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助手)输出相同的结果:
在浏览器中可见:
name<i class="fa-sort-alpha-asc"></i>
html代码:
<a href="http://acme.dev/dashboard/users?order=desc&sort=name">name<i class="fa-sort-alpha-asc"></i></a>
解决方案
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>');