Heim > Web-Frontend > js-Tutorial > Detaillierte Erklärung, wie die Routenfunktion von Laravel in JS implementiert wird

Detaillierte Erklärung, wie die Routenfunktion von Laravel in JS implementiert wird

高洛峰
Freigeben: 2017-02-15 17:01:39
Original
2076 Leute haben es durchsucht

Jeder sollte wissen, dass wir im Routing-Modul von Laravel einen Namen für jede Route festlegen können, wie zum Beispiel:

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

und dann können Sie erhalten Die Zugriffsadresse dieser Route über

route('blog.show', ['blog' => 1])
Nach dem Login kopieren

Für den Backend-Sprung können Sie

return redirect()->route('blog.show', ['blog' => 1]);
Nach dem Login kopieren
<🎜 verwenden >

Der Vorteil davon ist, dass ich bei einer Änderung der URL, zum Beispiel wenn ich

in &#39;/blog/{blog}&#39; ändern möchte, nur die Routing-Datei ändern muss und keine Anpassungen erforderlich sind irgendetwas anderes. &#39;/boke/{blog}&#39;

Dies ist jedoch auf das Backend beschränkt und kann in Blade-Vorlagen verwendet werden. Websites mit einem etwas größeren Maßstab trennen die JS-Dateien und schreiben sie nicht direkt in die Blade-Vorlage In js gesendet. Sie können die Anforderungsadresse nur aufschreiben, wenn die Seite springt, z. B.

location.href = &#39;/blog/&#39; + id;
Nach dem Login kopieren

. Wenn sich die Route ändert, müssen Sie die js-Datei ändern. Wenn dieselbe Route von mehreren js aufgerufen wird, kann es leicht passieren, dass eine oder zwei Änderungen übersehen werden. Also überlegte ich, ob ich eine Backend-ähnliche Routenfunktion in js implementieren könnte.

Die endgültige Lösung ist sehr einfach, nur zwei Funktionen.

Der Backend-Teil muss eine Funktion implementieren

function route_uri($name)
{
 return app(&#39;router&#39;)->getRoutes()->getByName($name)->getUri();
}
Nach dem Login kopieren

Die Funktion dieser Funktion besteht darin, die ursprüngliche Routing-Adresse basierend auf der zurückzugeben Routing-Name, wie zum Beispiel:

echo route_uri(&#39;blog.show&#39;); // 会输出/blog/{blog}
Nach dem Login kopieren

Das Frontend benötigt auch nur eine Funktion:

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

Hinweis: Dies bezieht sich auf lodash

Die Funktion dieser Funktion ist:

route(&#39;/blog/{blog}&#39;, {blog: 1}); //返回 /blog/1
route(&#39;/blog/{blog}&#39;, {blog: 1, preview: 1}); //返回 /blog/1?preview=1
Nach dem Login kopieren

Dann ist es ganz einfach in der Blade-Vorlage zu definieren:

var routes = {
 blog: {
  show: &#39;{{ route_uri(&#39;blog.show&#39;) }}&#39;,
  update: &#39;{{ route_uri(&#39;blog.update&#39;) }}&#39;,
  destroy: &#39;{{ route_uri(&#39;blog.destroy&#39;) }}&#39;
 }
};
Nach dem Login kopieren

Definieren Sie es einfach in der js-Datei:

$.post(route(routes.blog.update, {blog: 1}), {title: &#39;xxx&#39;, content: &#39;xxx&#39;})
Nach dem Login kopieren

Ausführlichere Erklärungen zur Implementierung der Routenfunktion von Laravel in JS finden Sie auf der chinesischen PHP-Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage