Php 使用Laravel'中的把手数据;s叶片模板函数

Php 使用Laravel'中的把手数据;s叶片模板函数,php,laravel,handlebars.js,blade,mustache,Php,Laravel,Handlebars.js,Blade,Mustache,我想使用把手数据(即,{{{id}})作为.blade模板视图上的Laravel辅助函数的参数 我知道在使用.blade.php扩展名(如{{{{each users}}}或{{name}}时会转义把手支架,这非常有效 当我想在Laravel的helper函数中使用@{{id}时会出现问题,因为嵌套的双花括号: <a href="#" class="btn btn-xs btn-warning" data-route="{{ route('admin.membership.toggle-s

我想使用把手数据(即,
{{{id}}
)作为.blade模板视图上的Laravel辅助函数的参数

我知道在使用.blade.php扩展名(如
{{{{each users}}}
{{name}}
时会转义把手支架,这非常有效

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

<a href="#" class="btn btn-xs btn-warning" data-route="{{ route('admin.membership.toggle-show-hide', ['id' => @{{ id }}]) }}">
    Hide
</a>
使用此功能,我可以在Handlebars模板(扩展名为.blade.php)中为从Laravel的控制器检索到的Handlebars JSON上下文中的每个项目生成路由字符串:

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


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

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


当涉及JS时,我不使用路由,我使用纯字符串路由,如
数据路由=“'/admin/membership/toggle/'+id”

您可以使用此示例代码

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

如果您确实需要在前端更改路线的“防弹”解决方案,则最方便的解决方案是在您的模型中为路线制作访问器。大概是这样的:

public function getRouteAttribute()
{
    return route('admin.membership.toggle-show-hide', ['id' => $this->id]);
}
protected $appends = ['route'];
然后,您需要使用$appends属性确保访问器在对象实例中始终可用(即使返回JSON响应),如下所示:

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

应该是这样。

找到了解决办法。突然谁需要



谢谢您的回答。我不想硬编码路线,因为路线可能会随着时间的推移而改变,然后我需要在每个车把模板和使用该路线的其他地方更改“字符串路线”。因此,我想使用Laravel的helper函数
route
,并将
id
参数作为handlebar表达式传递(
{{id}}
只是一个模板表达式,如果在
route
helper或任何其他已用花括号括起来的语句中不使用它,它就可以完美地工作)是的,我理解你的问题,但正如我所说的,在PHP函数中不可能使用JS(Handlebar)变量(例如,Laravel
route()
)。如果您害怕更改路由(这在实际项目中不会发生太多),您可以创建一个JS文件,在其中注册所有路由。如果你真的改变了路线,你只有一个JS文件可以编辑。几分钟前,我用我目前使用的替代方法更新了我的问题。你是说那样的事吗?它真的很好用,但我想知道是否有“更干净”的方法可以做到这一点。是的,像这样的东西已经足够干净了。你不应该太担心路线会随着时间的推移而改变。一旦你投入生产,这种情况就不会经常发生了。谢谢。我只是想利用Laravel的助手功能和Handlebar模板。与注册HB助手相比,我会花更多的时间来尝试找到更好的解决方案,但正如您所说,也许我不应该太担心路线随着时间的推移而改变;)这是一个非常好的解决方案,它消除了对前端资源路由(javascript)的担忧。这样,车把模板中所需的路线始终可用且有效。谢谢;)
<?php echo route('admin.membership.toggle-show-hide', ['id' => {{ id }}]) ?>