我想在 .blade 模板 View 上使用 Handlebars 数据(即 {{ id }}
)作为 Laravel 辅助函数中的参数。
我知道在使用 .blade.php 扩展名时如何转义 Handlebars 括号,例如 @{{#each users}}
或 @{{ name }}
并且效果很好.
当我想在 Laravel 的辅助函数中使用 @{{ id}}
由于嵌套的双大括号时,问题就出现了:
<a href="#" class="btn btn-xs btn-warning" data-route="{{ route('admin.membership.toggle-show-hide', ['id' => @{{ id }}]) }}">
Hide
</a>
我知道这是行不通的,因为辅助函数 route
不需要参数数组中的大括号,但我仍然需要能够将数据从 Handlebars contex 传递到 Blade 模板上的 Laravel 辅助函数中以某种方式查看。
我尝试了不同的方法来实现这一目标,但没有成功。
有人知道一些解决方法或对此有任何想法吗? 提前谢谢大家。
编辑
替代方案(我目前使用的)是编写一个 Handlebars 助手,它将接受所需的参数并为某些操作生成路径:
Handlebars.registerHelper("mmbrshpToggleShowHideRoute", function(id) {
return APP_URL + '/admin/membership/' + id + '/toggleShowHide';
});
使用它,我可以在 Handlebars 模板(带有 .blade.php 扩展名)中为从 Laravel Controller 检索的 Handlebars JSON 上下文中的每个项目生成路由字符串:
<a href="#" class="btn btn-xs btn-success" data-route="{{ mmbrshpToggleShowHideRoute id }}">
Hide
</a>
我不喜欢这种方法,因为我实际上是在 Handlebars 辅助函数中对路由 URL 进行硬编码。这可以工作并在整个 View 和模板中提供可重用性,但如果可以使用 Laravel 的 route
辅助函数生成路线并仅从 Handlebars 传递 id
参数,那就更好了上下文。
最佳答案
如果您确实需要“防弹”解决方案来更改前端的路线,那么最方便的解决方案是在模型中为路线创建一个访问器。像这样的事情:
public function getRouteAttribute()
{
return route('admin.membership.toggle-show-hide', ['id' => $this->id]);
}
然后,您需要使用 $appends 属性确保对象实例中的访问器始终可用(即使您返回 JSON 响应),如下所示:
protected $appends = ['route'];
应该是这样。
关于php - 在 Laravel 的 Blade 模板函数中使用 Handlebars 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39991807/