在Laravel的刀片模板功能中使用Handlebars数据

时间:2016-10-12 06:25:19

标签: php laravel handlebars.js blade mustache

我想在.blade模板视图中使用Handlebars数据(即{{ id }})作为Laravel帮助函数中的参数。

我知道在使用。@{{#each users}}@{{ name }}这样的.blade.php扩展程序时转义句柄括号并且效果很好。

当我想在Laravel的辅助函数中使用@{{ id}}时会出现问题,因为嵌套的双花括号:

<a href="#" class="btn btn-xs btn-warning" data-route="{{ route('admin.membership.toggle-show-hide', ['id' => @{{ id }}]) }}">
    Hide
</a>

我知道这不起作用,因为辅助函数route不期望参数数组中的大括号,但我仍然需要能够以某种方式将数据从Handlebars上下文传递到刀片模板视图上的Laravel帮助函数。

我尝试了不同的方法来实现这一目标,但没有成功。

有谁知道一些解决方法或对此有任何想法? 提前谢谢大家。

修改

替代(我目前使用的)是编写一个Handlebars帮助程序,它将接受所需的参数并为某些操作生成路径:

Handlebars.registerHelper("mmbrshpToggleShowHideRoute", function(id) {
    return APP_URL + '/admin/membership/' + id + '/toggleShowHide';
});

使用这个,我可以在Handlebars模板(扩展名为.blade.php)中为从Laravel控制器中检索到的Handlebars JSON上下文中的每个项生成路径字符串:

<a href="#" class="btn btn-xs btn-success" data-route="{{ mmbrshpToggleShowHideRoute id }}">
    Hide
</a>

我不喜欢这种方法,因为我实际上是在Handlebars帮助函数中硬编码路由URL。这样可以在整个视图和模板中提供可重用性,但如果有可能使用Laravel的route辅助函数生成路径并且只从Handlebars上下文中传递id参数,那就更好了。

4 个答案:

答案 0 :(得分:2)

如果你真的需要&#34;防弹&#34;在前端更改路由的解决方案比最方便的解决方案是在模型中为路由创建一个访问器。像这样:

pGlobal = PyDict_New();
PyDict_SetItemString(pGlobal, "__builtins__", PyEval_GetBuiltins());

然后你需要使用$ appends属性确保访问者在对象实例中始终可用(即使你返回JSON响应):

public function getRouteAttribute()
{
    return route('admin.membership.toggle-show-hide', ['id' => $this->id]);
}

应该是它。

答案 1 :(得分:1)

事实上,您不能同时使用JS和PHP变量/函数,因为JS变量可能会在PHP会话期间随时间发生变化。

当涉及到JS时,我不使用路由,我使用普通的字符串路由,如data-route="'/admin/membership/toggle/' + id"

答案 2 :(得分:0)

您可以使用此示例代码。

<a href=".URL::route('admin.membership.toggle-show-hide',[$id])." class="btn-blue">Hide</a>

答案 3 :(得分:0)

找到了解决办法。突然谁需要 enter image description here

来自

{{ route('admin.membership.toggle-show-hide', ['id' => @{{ id }}]) }}

<?php echo route('admin.membership.toggle-show-hide', ['id' => {{ id }}]) ?>