Laravel检查用户是否被禁止,如果是,请骂他的名字

时间:2015-10-08 17:23:30

标签: php laravel-4

我想检查用户是否被禁止,这是有效的,但现在我想要一个返回用户名的函数。

这就是我现在所拥有的:

public static function CheckIfBanned($username)
{
    $CheckBan = Ban::orderBy('expire', 'ASC')->where('lifted', '=', '0')
                                            ->where('expire', '>', \Carbon\Carbon::now())
                                            ->where('username', '=', $username)
                                            ->get();

    if ($CheckBan)
    {
        return '<s>'.$username.'</s>';
    }
    else
    {
        return $username;
    }
}

所以,这样可行,但只需要第一个用户。

我需要添加foreach吗?如果是这样,在哪里以及如何?

1 个答案:

答案 0 :(得分:0)

假设您的代码工作正常并且给出了一个用户名列表,只需在循环中调用您的函数就可以得到您想要的结果:

$displayableUsernames = [];
foreach($usernames as $username) {
    $displayableUsernames[] = CheckIfBanned($username);
}

使用上面的代码片段,您可以解析纯文本用户名列表,并将其添加到可以使用的可显示用户名数组中。

但据我所知,这是一个需要完成每隔时间从数据库中请求用户用户名的过程。

因此,如果您使用了一个使用您的函数获取用户用户名的Eloquent Accessor方法,它可能是一个更简洁,更优雅的解决方案:

class User extends Eloquent {
    public function getUsernameAttribute($value)
    {
        return CheckIfBanned($value);
    }
}

Eloquent访问器方法的文档可以在这里找到:http://laravel.com/docs/4.2/eloquent#accessors-and-mutators

编辑:

如果您的CheckIfBanned()功能位于Helper课程范围内,则可以使用User.php模型类中的以下代码进行调用:

use App\Controllers\Helper;

class User extends Eloquent {
    public function getUsernameAttribute($value)
    {
        return Helpers::CheckIfBanned($value);
    }
}

请注意,我不知道您的Helper类的实际命名空间是什么,因此您必须使用正确的命名空间导入Helper类。

在实践中使用此访问器,您只需调用以下代码:

$user = User::find($id);

$username = $user->username; // This will automatically call your CheckIfBanned() function