Я хочу использовать данные 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
параметр из контекста руля.
Если вам действительно нужно «пуленепробиваемое» решение для изменения маршрутов на веб-интерфейсе, то наиболее удобным решением является создание средства доступа для маршрута в вашей модели. Что-то вроде этого:
public function getRouteAttribute()
{
return route('admin.membership.toggle-show-hide', ['id' => $this->id]);
}
Затем вам нужно убедиться, что метод доступа всегда доступен (даже если вы возвращаете JSON-ответ) в экземплярах вашего объекта, используя свойство $ appends, например:
protected $appends = ['route'];
Это должно быть так.
Фактически, вы не можете использовать переменные / функции JS и PHP одновременно, поскольку переменные JS могут меняться со временем во время сеанса PHP.
Когда задействован JS, я не использую маршруты, я использую простые строковые маршруты, такие как data-route="'/admin/membership/toggle/' + id"
Вы можете использовать этот пример кода.
<a href=".URL::route('admin.membership.toggle-show-hide',[$id])." class="btn-blue">Hide</a>