ホームページ > 記事 > ウェブフロントエンド > Laravelのルート関数をJSで実装する方法を詳しく解説
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 サイトに注目してください。