ホームページ  >  記事  >  ウェブフロントエンド  >  Laravelのルート関数をJSで実装する方法を詳しく解説

Laravelのルート関数をJSで実装する方法を詳しく解説

高洛峰
高洛峰オリジナル
2017-02-15 17:01:392045ブラウズ

Laravel のルーティング モジュールでは、各ルートに次のような名前を設定できることを皆さんは知っておく必要があります。 Jump は

Route::get('/blog/{blog}', 'BlogController@show')->name('blog.show')

を使用できます。これの利点は、URL が変更された場合、たとえば

したい場合、ルーティング ファイルを変更するだけで済み、他の場所を調整する必要がないことです。

ただし、これはバックエンドに限定されており、ブレード テンプレートで使用できます。これにより、js ファイルが分離され、ブレード テンプレートに直接書き込まれなくなります。これにより、ajax リクエストが js またはブレード テンプレートで送信されます。転送するときは、

route('blog.show', ['blog' => 1])

のようにリクエストアドレスを記述するだけで、同じルートを呼び出す場合はjsファイルを変更する必要があります。複数の JS を使用すると、1 つまたは 2 つの変更が発生するのを見逃す可能性があります。そこでバックエンド風のルート関数をjsで実装できないか考えてみました。

最終的な解決策は非常にシンプルで、たった 2 つの関数です。

'/blog/{blog}'改成 '/boke/{blog}'バックエンド部分は関数を実装する必要があります

return redirect()->route('blog.show', ['blog' => 1]);

この関数の機能は、次のようなルート名に基づいて元のルーティングアドレスを返すことです:

location.href = '/blog/' + id;

フロント- end にも必要な関数は 1 つだけです:

function route_uri($name)
{
 return app('router')->getRoutes()->getByName($name)->getUri();
}

注:

Lodash はここで引用されています

この関数の機能は次のとおりです:

echo route_uri('blog.show'); // 会输出/blog/{blog}

非常に単純で、ブレードで定義されています。テンプレート: js ファイル内の

let route = (routeUrl, param) => {
 let append = [];
 for (let x in param) {
  let search = '{' + x + '}';
  if (routeUrl.indexOf(search) >= 0) {
   routeUrl = routeUrl.replace('{' + x + '}', param[x]);
  } else {
   append.push(x + '=' + param[x]);
  }
 }
 let url = '/' + _.trimStart(routeUrl, '/');
 if (append.length == 0) {
  return url;
 }
 if (url.indexOf('?') >= 0) {
  url += '&';
 } else {
  url += '?';
 }
 url += append.join('&');
 return url;
}

ここだけ:

route('/blog/{blog}', {blog: 1}); //返回 /blog/1
route('/blog/{blog}', {blog: 1, preview: 1}); //返回 /blog/1?preview=1

Laravel のルート関数を JS で実装する方法の詳細な説明については、PHP 中国語 Web サイトに注目してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。