久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放AV片

<center id="vfaef"><input id="vfaef"><table id="vfaef"></table></input></center>

    <p id="vfaef"><kbd id="vfaef"></kbd></p>

    
    
    <pre id="vfaef"><u id="vfaef"></u></pre>

      <thead id="vfaef"><input id="vfaef"></input></thead>

    1. 站長資訊網(wǎng)
      最全最豐富的資訊網(wǎng)站

      教你在JS中實現(xiàn)Laravel的route函數(shù)

      下面由Laravel開發(fā)教程欄目給大家介紹Laravel ORM 中你不知道的騷操作,希望對需要的朋友有所幫助!

      教你在JS中實現(xiàn)Laravel的route函數(shù)

      在Laravel的路由模塊里,我們可以給每一個路由設(shè)定一個名字,比如:

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

      然后就可以通過 route('blog.show', ['blog' => 1]) 來獲取到這個路由的訪問地址,后端跳轉(zhuǎn)可以用

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

      這樣做的好處是如果發(fā)生url變更,比如我想把/blog/{blog}改成/boke/{blog},只需要改路由文件,別的地方都不用調(diào)整。所以推薦給每個路由都命個名,并通過路由名的方式來獲取。

      但這個僅限于后端以及blade模板可以使用,稍微上點規(guī)模的網(wǎng)站都會把js文件單獨拎出來,不會把js直接寫在blade模板中,這樣就導(dǎo)致js里發(fā)ajax請求時或者頁面跳轉(zhuǎn)時只能將請求地址寫死,比如

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

      這樣萬一路由發(fā)生變更,還得去修改js文件,如果同一個路由被多個js調(diào)用,很容易漏改那么一兩個。

      所以我就考慮能不能在js中實現(xiàn)一個類似后端的route函數(shù)。

      最終的解決方案很簡單,兩個函數(shù)就可以搞定。

      后端部分需要實現(xiàn)一個函數(shù):

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

      這個函數(shù)的作用是根據(jù)路由名稱返回原始的路由地址,比如:

      echo route_uri('blog.show');  // 會輸出/blog/{blog}

      前端也只需要一個函數(shù):

      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; }

      注1:ES6語法,如果沒用babel的自行轉(zhuǎn)ES5

      注2:這里引用了lodash

      這個函數(shù)的作用是:

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

      然后就很簡單了,在blade模板中把這個頁面所有需要用到的路定義在一個對象中:

      var routes = {     blog: {         show: '{{ route_uri('blog.show') }}',         update: '{{ route_uri('blog.update') }}',         destroy: '{{ route_uri('blog.destroy') }}'     } };

      在js文件里就可以:

      $.post(route(routes.blog.update, {blog: 1}), {title: 'xxx', content: 'xxx'})

      用法和后端的route幾乎沒有差別

      贊(0)
      分享到: 更多 (0)
      網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號