Используйте данные Handlebars в функции шаблона лезвия Laravel

Я хочу использовать данные Handlebars (т.е. {{ id }}) в качестве параметра в вспомогательной функции Laravel в представлении шаблона .blade.

Я знаю о экранировании скобок Handlebars при использовании расширения .blade.php, например @{{#each users}} или же @{{ name }} и это работает отлично.

Проблема возникает, когда я хочу использовать @{{ id}} внутри вспомогательной функции Laravel из-за вложенных двойных фигурных скобок:

<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) для каждого элемента в контексте JSON Handlebars, полученного из контроллера Laravel:

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

Мне не нравится этот подход, потому что я на самом деле жестко программирую URL-адрес маршрута в вспомогательной функции Handlebars. Это работает и обеспечивает повторное использование всех представлений и шаблонов, но было бы лучше, если бы была возможность генерировать маршрут с использованием Laravel. route вспомогательная функция и просто передать id параметр из контекста руля.

2

Решение

Если вам действительно нужно «пуленепробиваемое» решение для изменения маршрутов на веб-интерфейсе, то наиболее удобным решением является создание средства доступа для маршрута в вашей модели. Что-то вроде этого:

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

Затем вам нужно убедиться, что метод доступа всегда доступен (даже если вы возвращаете JSON-ответ) в экземплярах вашего объекта, используя свойство $ appends, например:

protected $appends = ['route'];

Это должно быть так.

2

Другие решения

Фактически, вы не можете использовать переменные / функции JS и PHP одновременно, поскольку переменные JS могут меняться со временем во время сеанса PHP.

Когда задействован JS, я не использую маршруты, я использую простые строковые маршруты, такие как data-route="'/admin/membership/toggle/' + id"

1

Вы можете использовать этот пример кода.

<a href=".URL::route('admin.membership.toggle-show-hide',[$id])." class="btn-blue">Hide</a>
0
По вопросам рекламы [email protected]