我想在Laravel(刀片)视图中打印一个按钮。我已经创建了一个创建此按钮的功能,因为:如果加载视图的用户没有权限查看此按钮,则该按钮不会显示(我还没有)做了这个部分)。在我需要按钮的每个视图中,我想使用此方法。该方法的返回值为:
<a href="{{ URL::to(scholen/toevoegen) }}"><button class="btn btn-primary">Nieuwe school</button></a>
只有一个问题:方法createButton()
返回一个字符串。因此,{{ URL::to('scholen/toevoegen') }}
在刀片中不起作用。
有解决方案吗?我不想在我的方法中输入网址,因为它必须是可变的。
查看
<?= Authorize::createButton('Nieuwe school', array('scholen', 'toevoegen'), null, 'btn btn-primary'); ?>
助手类
static function createButton($text = null, $route = null, $id = null, $class = null)
{
$button = '<a href="{{ URL::to(<!URL!>) }}"><button class="<!CLASS!>"><!TEXT!></button></a>';
if ($text != null) {
$button = str_replace("<!TEXT!>", $text, $button);
}
if ($route[0] != null && $route[1] != null) {
$button = str_replace("<!URL!>", $route[0] .'/'. $route[1] . ($id != null ? '/'. $id : ''), $button);
}
if ($class != null) {
$button = str_replace("<!CLASS!>", $class, $button);
}
return $button;
}
答案 0 :(得分:1)
我建议在createButton()
方法中评估路径变量,而不是在Blade中评估 - 就像这样:
$button = '<a href="' . URL::to($someConstructedRoute) . '"><button class="<!CLASS!>"><!TEXT!></button></a>';
现在,我们所需要的只是在该代码之上创建构造的路径。
但是,我也认为你的方法有很大的改进空间,例如: sprintf()
。它似乎也应该永远不会是空的,因为你总是想要一个真正的链接。这是我如何改变它的一个例子 - 但这只是一个建议。
static function createButton($routeVars, $text = '', $id = null, $class = '')
{
$route = implode('/', $routeVars);
if ($id) $route .= '/' . $id;
$url = URL::to($route);
return sprintf('<a href="%s"><button class="%s">%s</button></a>',
$url, $class, $text
);
}
通过将空值更改为空字符串,我们可以按原样包含它们。例如,如果没有提供文字,则该按钮看起来像<a href="somelink"><button class="someclass"></button></a>
,没有文字。
实际上,我可能会将三个路径创建提取到一个静态方法,但这可能有点挑剔。
希望这会有所帮助。 :)