2016-10-12 7 views
1

.bladeテンプレートビューのLaravelヘルパー関数のパラメータとしてハンドルバーデータ({{ 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 contexのデータをブレードテンプレートビューのLaravelのヘルパー関数に何らかの形で渡すことができる必要があります。

私はこれを達成するためにさまざまな方法を試みましたが、成功しませんでした。

誰かが何らかの回避策を知っているのですか、それとも何か考えていますか? ありがとうございます。

EDIT

(私が現在使用して)代替が必要なパラメータを受け入れ、いくつかのアクションのためのルートを生成しますハンドルバーヘルパー書くことである。これを使用して

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

を、I Handlebarsテンプレートのルート文字列(.blade.php拡張子付き)を、Laravelのコントローラから取得したHandlebars JSONコンテキストの各項目に対して生成することができます。

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

私は実際にハンドルのヘルパー機能でルートURLをハードコーディングしているので、私はこのアプローチが嫌いです。これは動作し、ビューとテンプレート全体で再利用性を提供しますが、Laravelのrouteヘルパ関数を使用してルートを生成し、Handlebarsコンテキストからidパラメータを渡す可能性がある場合はより良いでしょう。

答えて

2

フロントエンドのルートを変更するには、本当に便利なソリューションが必要です。これは、モデルのルートのアクセサーを作ることです。

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

その後、あなたは$を使用して、オブジェクトインスタンスに(あなたはJSONレスポンスを返す場合でも)アクセサが常に利用可能であることを確認する必要があり、このようにプロパティを追加します:

protected $appends = ['route']; 

そのはず、このような何かそれでは。

+0

これはリソースを心配する必要性を取り除く、フロントエンド(javascript)のルート。このように、Handlebarsテンプレートに必要なルートは常に有効で有効です。ありがとう;) – lbartolic

1

実際、JS変数がPHPセッション中に時間とともに変化する可能性があるため、JS変数とPHP変数の両方を同時に使用することはできません。 JSは私がルートを使用していない関与している場合は

、私はあなたがこのサンプルコードを使用することができますdata-route="'/admin/membership/toggle/' + id"

+0

ありがとうございます。私はルートが時間の経過とともに変化するかもしれないので、ルートをハードコードしたくないし、各ハンドルバーテンプレートとそのルートが使われている他の場所で '文字列ルート'を変更する必要があります。そのため、私はLaravelのヘルパ関数 'route'を使い、' id'パラメータをHandlebars式( '{{id}}'をテンプレート式にして渡します。ヘルパー、または既に中括弧で囲まれた他のステートメント)。 – lbartolic

+1

私はあなたの質問を理解しましたが、私が言ったように、PHP関数(例えばLaravel 'route()'の中でJS(ハンドルバー)変数を使うことはできません。 ルートを変更することを恐れている場合(実際のプロジェクトではそれほど多くは起こりません)、すべてのルートを登録するJSファイルをいつでも作成できます。実際にルートを変更する場合は、編集するJSファイルは1つだけです。 – SimonDepelchin

+0

数分前に、私は現在使用している代替案を使って質問を更新しました。そんなことを意味しましたか?本当にうまくいきましたが、これを行うための「きれいな」方法があるのか​​疑問に思いました。 – lbartolic

0

のようなプレーンな文字列のルートを使用しています。

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