2016-07-14 89 views
-1

我正在关注laracasts视频以创建关注选项,但点击用户名时显示上述错误,我不知道在哪里定义此变量。 Followscontroller未定义的变量:currentUser

<?php 

namespace App\Http\Controllers; 
use Redirect; 
use App\User; 
use Laracasts\Commander\CommanderTrait; 
use App\FollowUserCommand; 
use Sentinel; 
use Illuminate\Support\Facades\Input; 
use App\Http\Requests; 
use App\Http\Controllers\Controller; 


class FollowsController extends Controller 
{ 
use CommanderTrait; 
/** 
* Follow a User 
* 
* @param \Illuminate\Http\Request $request 
* @return \Illuminate\Http\Response 
*/ 
public function store() 
{ 
    $input = array_add(Input::all(), 'user_id', Sentinel::getuser()->id); 
    $this->execute(FollowUserCommand::class, $input); 
    return Redirect::back(); 
} 


/** 
* Unfollow a User 
* 
* @param int $id 
* @return \Illuminate\Http\Response 
*/ 
public function destroy($id) 
{ 
    // 
} 
} 

FollowUserCommand

<?php namespace App; 
use App\User; 

class FollowUserCommand { 

public $user_id; 
public $userIdToFollow; 

function __construct($user_id, $userIdToFollow) 
{ 
    $this->user_id = $user_id; 
    $this->userIdToFollow = $userIdToFollow; 
} 
} 

FollowUserCommandHandler

<?php namespace App; 

use Laracasts\Commander\CommandHandler; 

class FollowUserCommandHandler implements CommandHandler { 

protected $userRepo; 

function __construct(UserRepository $userRepo) 
{ 
    $this->userRepo = $userRepo; 
} 




public function handle($command) 
{ 
    $user = $this->userRepo->findById($command->user_id); 

    $this->userRepo->follow($command->userIdToFollow, $user); 

    return $user; 
} 

} 

UserRepository

<?php namespace App; 
use App\User; 

class UserRepository { 

public function save(User $user) 
{ 
    return $user->save(); 
} 

public function getPaginated($howMany = 4) 
{ 
    return User::orderBy('first_name', 'asc')->paginate($howMany); 
} 

public function findByUsername($username) 
{ 
    return User::with(['feeds' => function($query) 
    { 
     $query->latest(); 
    } 

    ])->whereUsername($username)->first(); 
} 

public function findById($id) 
{ 
    return User::findOrFail($id); 
} 

public function follow($userIdToFollow, User $user) 
{ 
    return $user->follows()->attach($userIdToFollow); 
} 
} 

user.php的

<?php namespace App; 
use Cartalyst\Sentinel\Users\EloquentUser; 
use Illuminate\Database\Eloquent\SoftDeletes; 


class User extends EloquentUser { 


/** 
* The database table used by the model. 
* 
* @var string 
*/ 
protected $table = 'users'; 

/** 
* The attributes to be fillable from the model. 
* 
* A dirty hack to allow fields to be fillable by calling empty fillable array 
* 
* @var array 
*/ 
protected $fillable = []; 
protected $guarded = ['id']; 

/** 
* The attributes excluded from the model's JSON form. 
* 
* @var array 
*/ 
protected $hidden = ['password', 'remember_token']; 

/** 
* To allow soft deletes 
*/ 
use SoftDeletes; 

protected $dates = ['deleted_at']; 



public function feeds() 
{ 
    return $this->hasMany('App\Feed'); 
} 

public function comment() 
{ 
    return $this->hasMany('App\Comment'); 
} 


    // This function allows us to get a list of users following us 
public function follows() 
{ 
    return $this->belongsToMany(self::class, 'follows', 'follower_id', 'followed_id')->withTimestamps(); 
} 

// Get all users we are following 
public function following() 
{ 
    return $this->belongsToMany('User', 'followers', 'user_id', 'follow_id')->withTimestamps(); 
} 

// if current user follows another user 
public function isFollowedBy(User $otherUser) 
{ 
    $idsWhoOtherUserFollows = $otherUser->follows()->lists('followed_id'); 

    return in_array($this->id, $idsWhoOtherUserFollows) ; 
} 
} 

form.blade.php

@if($user->isFollowedBy($currentUser)) 

<p>You are following {{ $user->username }}<p> 

@else 
{!! Form::open(['route' => 'follows_path']) !!} 
{!! Form::hidden('userIdToFollow', $user->id) !!} 
<button type="submit" class="btn btn-primary">Follow {{ $user->username }} </button> 
{!! Form::close() !!} 
@endif 
+0

您使用的是什么版本的laravel?你应该坚持一个标签。此外,请让我知道,如果你已经尝试了我的解决方案 – Jonathan

+0

否使用你的解决方案后我得到这个错误参数1传递给应用程序\用户:: isFollowedBy()必须是App \ User的实例,在第一行和已定义的C:\ wamp \ www \ newjosh \ storage \ framework \ views \ 186e95fed899bd7661ff5cbd0b490365并定义(视图:C:\ wamp \ www \ newjosh \ resources \ views \ member \ partials \ follow-form.blade.php) (View:C:\ wamp \ www \ newjosh \ resources \ views \ member \ partials \ follow-form.blade.php) –

+0

我正在使用laravel 5.1 –

回答

1

假设教程实现的验证类,可以通过改变@if($user->isFollowedBy($currentUser))来获得当前用户@if($user->isFollowedBy(\Illuminate\Support\Facades\Auth::user()))。否则很难阅读你的代码,但对你想要彻底的赞赏。

你显然不想用这种方式使用Auth::user()。尝试使用它作为Auth::user()没有完整的名称空间,但否则在处理该视图的控制器中添加命名空间为use Illuminate\Support\Facades\Auth;

+0

使用您的解决方案后没有我收到此错误参数1通过到App \ User :: isFollowedBy()必须是App \ User的一个实例,给定为null,在第1行调用并在C:\ wamp \ www \ newjosh \ storage \ framework \ views \ 186e95fed899bd7661ff5cbd0b490365中定义(View:C:\ wamp \ www \ newjosh \ resources \ views \ member \ partials \ follow-form.blade.php)(查看:C:\ wamp \ www \ newjosh \ resources \ views \ member \ partials \ follow-form.blade.php) –

+0

我正在使用laravel 5.1 –