2016-07-14 82 views
2

我想在laravel(我是新手)中爲我的web應用程序創建一個功能,即每個帖子/評論/主題(在我的情況下)用戶有能力upVote和downVote。現在我正在用upVote開玩笑,但它並沒有任何作用。正在更新內容Laravel

在視圖(welcome.blade.php) 我:

<a href="{{ route('Voteplus', ['name' => $Theme->name]) }}"> <img class="media-object" style="height:40px; width:40px;" src="images/upVote.svg" alt="..."></a> 

其中$主題 - >名稱是用戶要給予好評/像(任何)之一。

路線:

Route::put('/', [ 
'uses'=>'[email protected]', 
'as' =>'Voteplus' //Name of route 
    ]);  

而且控制器:

<?php 

namespace App\Http\Controllers; 
use App\NewTheme; 
use DB; 
class Vote extends Controller { 

    public function VotePlus($name){ 

    DB::table('New_Themes') 
->where('name', $name) 
->increment('upVotes', 1); 

    $Themes = NewTheme::paginate(5); 

    return redirect()->route('welcome', ['Themes'=>$Themes]); 
} 
    }; 

我想要的一切,但它不工作。有人能幫助我嗎?

+0

' - > where('title',$ title)''應該是' - > where('title',$ name )'? –

+0

我改變了,但它不起作用 – DomainFlag

+0

也許投放路線是錯誤的,我使用它都是錯誤的? – DomainFlag

回答

1

解決此問題的另一種方法是使用Ajax。現在,每次用戶想要投票選擇一個主題時,該頁面都會刷新,這可能非常令人沮喪。

我想你應該使用Ajax發佈到後端,並在成功回調中使用javascript更新視圖。我建議使用Angular作爲前端。它擁有你所需要的一切,並且製作一個Ajax請求非常簡單。

所以,下面是一個簡單的例子,說明如何使用Angular + Laravel來使您的Web應用程序正常工作。

前端

<html ng-app="exampleApp"> 
<head> 
    <title>MyTitle</title> 
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
</head> 
<body> 
    <div ng-controller="ThemeController"> 
     <ul> 
      <li ng-repeat="theme in themes"> 
       <span><% theme.name %></span> 
       <p><% theme.description %></p> 
       <p><% theme.votes %></p> 

       <a href="#" ng-click="voteUp(theme)">Vote Up</a> 
      </li> 
     </ul> 
    </div> 

    <script type="text/javascript"> 

     var app = angular.module("exampleApp", [], function($interpolateProvider) { 
      // This we need to not collide with Laravel's {{ }} 
      $interpolateProvider.startSymbol('<%'); 
      $interpolateProvider.endSymbol('%>'); 
     }); 

     app.controller('ThemeController', function($scope, $http) { 
      $scope.themes = []; 

      $scope.voteUp = function(theme) { 
       $http({ 
        url: '/api/themes/voteUp', 
        method: 'POST', 
        data: { 
         id: theme.id 
        } 
       }).success(function(response) { 
        theme.votes += 1; 
       }); 
      } 

      // On init we need to get the themes 
      $http({ 
       url: '/api/themes', 
       method: 'GET' 
      }).success(function(themes) { 
       $scope.themes = themes; 
      }); 

     }); 

    </script> 
</body> 
</html> 

後端

你的路線

Route::get('api/themes', '[email protected]'); 
Route::post('api/themes/voteUp, '[email protected]'); 

你ThemeController

function getFive() { 
    return Theme::paginate(5); 
} 

function voteUp(Request $request) { 
    $theme = Theme::whereId($request->id); 
    $theme->votes += 1; 
    $theme->save(); 

    return $theme; 
} 

此代碼未經測試。但我會認爲你明白了!

+0

我改變了一點點,它的工作原理!非常感謝你! – DomainFlag

+0

太棒了!很高興我能幫到 –

2

使用錨標籤,您只發送獲取請求。如果你想要它被放置,你必須創建一個表單,然後添加:

<input type="hidden" name="_method" value="PUT"> 
+0

謝謝你的見解,我終於解決了這個問題:) – DomainFlag