dima9595
@dima9595
Junior PHP

Пакет cybercog/laravel-ban, при разблокировке, выдаёт null и не разблокирует пользователя, почему?

Опять вопрос по пакету cybercog/laravel-ban.

Есть код разблокировки пользователя (после блокирования):
/**
     * Разблокировка пользователя
     * @param int $id
     * @return \Illuminate\Http\RedirectResponse
     */
    public function unbanUser(int $id){
        $user = User::onlyBanned()->find($id);

        if($user){
            $unbanUser = $user->unban();

            if($unbanUser){
                flash('Пользователь ' . $user->login . ' успешно разблокирован!')
                    ->success();

                return redirect()->intended(route('admin.users'));
            }else{
                flash('Ошибка при разблокировке пользователя!')->warning();

                return redirect()->back();
            }
        }else{
            flash('Невероятно, но тут ошибка!)')->info();

            return redirect()->intended(route('admin.users'));
        }
    }


И view кнопки на разблокировку:
@if($user->isBanned())
    <tr class="table-danger">
@else
    <tr>
@endif

    <th scope="row">{{ $user->id }}</th>
    <td>{{ $user->login }}</td>
    <td>{{ $user->mail }}</td>
    <td>{{ ($user->status) ? 'Активирован' : 'Не активирован' }}</td>
    <td>{{ $user->created_at }}</td>
    <td>
        @can('admin.users.banned')
            @if($user->isNotBanned())
                <a href="{{ route('admin.users.banned', $user->id) }}">
                    <i class="fa fa-ban text-danger" style="font-size: 2em;"></i>
                </a>
            @endif
        @endcan

        @can('admin.users.endBanned')
            @if($user->isBanned())
                <a href="{{ route('admin.users.endbanned', $user->id) }}">
                    <i class="fa fa-check-circle text-success" style="font-size: 2em;"></i>
                </a>
            @endif
        @endcan
    </td>
</tr>


При нажатии разблокировка не проходит, т.к. отдаёт null в методе $user->unban(); Сам же $user существует и данные есть.

На всякий случай модель User:
<?php
namespace App;

use Cog\Contracts\Ban\Bannable as BannableContract;
use Cog\Laravel\Ban\Traits\Bannable;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Spatie\Permission\Traits\HasRoles;

class User extends Authenticatable implements BannableContract{
    use Notifiable, HasRoles, Bannable;

    protected $fillable = ['login', 'mail', 'password', 'banned_at'];
    protected $hidden = ['password', 'remember_token'];
    protected $dates = ['deleted_at', 'banned_at'];

    /**
     * Поле E-Mail адреса для уведомлений
     * @return mixed
     */
    public function routeNotificationForMail(){
        return $this->mail;
    }

    /**
     * Шифруем пароль по умолчанию функцией bcrypt.
     * @param $password
     */
    public function setPasswordAttribute($password){
        $this->attributes['password'] = bcrypt($password);
    }

    /**
     * Не даём заблокированным пользователям заходить в свой аккаунт
     * @return bool
     */
    public function shouldApplyBannedAtScope(){
        return true;
    }
}


Заранее спасибо!

UPD: А если в поле удалить deleted_at (точнее сделать null), то выдаёт ошибку: "Trying to get property 'bans' of non-object", а в бд там появляется новая дата (Carbon::now).
  • Вопрос задан
  • 221 просмотр
Решения вопроса 1
@iljaGolubev
в unban() нет return
проверьте $user->isBanned();
и научитесь работать с документацией и исходниками
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы