【问题标题】:Laravel check if user is banned, if so, stike his nameLaravel 检查用户是否被禁止,如果是,请添加他的名字
【发布时间】:2015-10-09 02:21:57
【问题描述】:

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

这就是我现在拥有的:

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 吗?如果是这样,在哪里以及如何?

【问题讨论】:

  • 您是要打印一个用户名还是多个用户名?
  • 我想在多个用户名上显示这个。类似于他们在 MyBB 中的东西。所以当一个用户被封禁时,他需要显示一个罢工&lt;s&gt;username&lt;/s&gt;,否则他需要正常显示。

标签: php laravel-4


【解决方案1】:

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

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

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

不过,据我了解,这是一个每次都需要在您从数据库中请求用户的用户名时完成的过程。

因此,如果您使用 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

【讨论】:

  • 所以我需要将第一个 sn-p 添加到我的函数 CheckIfBanned() 和第二个到 userClass?或者应该怎么做? :p
  • 我有第一个函数站在我的班级Helper 扩展BaseController 我不知道这是否会产生任何问题?
  • 第二个 sn-p 是我个人偏好作为解决您问题的方法。是的,将上面的 getUsernameAttribute() 方法添加到您的 User 类中。我在这里给出了两个解决方案。第一个 sn-p 用于构建要使用的可显示用户名的数组/列表时。您没有将第一个 sn-p 添加到函数 CheckIfBanned() 中,而是在循环中使用该函数。抱歉,如果不清楚。
  • 好的,Class 'Controllers\Helper' not found 是我现在得到的错误,但是 Helper 类确实存在?!类助手确实扩展了 BaseController,这会导致问题吗?
  • Helper 类的命名空间是什么?它应该在文件的顶部
猜你喜欢
  • 2019-11-06
  • 1970-01-01
  • 2017-03-07
  • 1970-01-01
  • 2021-01-04
  • 1970-01-01
  • 1970-01-01
  • 2022-01-20
  • 1970-01-01
相关资源
最近更新 更多