Это код здесь:
protected function credentials(Request $request)
{
$admin=admin::where('email',$request->email)->first();
if (count($admin))
{
if ($admin->status==0){
return ['email'=>'inactive','password'=>'You are not an active person, Please contact to admin'];
}
else{
return ['email'=>$request->email,'password'=>$request->password,'status'=>1];
}
}
return $request->only($this->username(), 'password');
}
Когда я запускаю код, эта ошибка становится:
"count(): Parameter must be an array or an object that implements Countable"
Вы можете попробовать функцию is_countable в php. stackoverflow.com/a/54806221/3016038
вот быстрое исправление sdtuts.com/… даже параметр не array






Вы должны проверить, является ли он нулевым, а не count, потому что вы запрашиваете один результат с first()
только это
if ($admin)
сделаю это.
если вы используете возврат коллекции с помощью ->get(), вы можете проверить $admin->count().
Тогда что мне делать, пожалуйста, скажи мне
Я пробую это так: $ admin = admin :: where ('email', $ request-> email) -> first (); // $ count = count ($ admin) if ($ admin-> count ()) {if ($ admin-> status == 0) {return ['email' => 'inactive', 'password' => ' Вы не активный человек, обратитесь к админу ']; } else {return ['email' => $ request-> email, 'password' => $ request-> password, 'st atus' => 1]; }} return $ request-> only ($ this-> username (), 'пароль');
но когда, если условие истинно, появляется пустая страница, а не печатать сообщение в условии, если
@Hasan опубликовал код, о котором я говорю. Я хотел дать вам подсказки, чтобы вы могли решить эту проблему самостоятельно. Но вот оно.
Вы правы, но у меня тоже проблема, ошибка не решается
Обратите внимание, что здесь, когда вы используете метод count(), должен быть счетный элемент, например массив или объект, реализующий ArrayAccess.
Admin::where('email',$request->email)->first();
Но метод first() дает вам единственный элемент, а не коллекцию или массив. Метод get() возвращает вам счетную коллекцию с найденными элементами
Вместо использования count вы можете напрямую проверить саму переменную, определена ли она или равна нулю.
if ($admin){
// do something here
}
или вы можете использовать метод is_null()
if (!is_null($admin)){
// do something here
}
Я пробую первый метод и использую if ($ admin), но появляется ошибка, которая продолжается и показывает пустую страницу, которая не отображается, если состояние сообщения о блоке
и если я использую метод get () и если ($ admin), то появляется эта ошибка «Свойство [статус] не существует в этом экземпляре коллекции».
Ошибка @faraz имеет смысл, потому что метод get дает вам коллекцию. И перед получением статуса нужно сначала выбрать товар. как $admin->{0}->status, и я не знаю, что вы делаете с информацией об учетных данных, поэтому я не могу понять, почему вы получаете пустую страницу. Вы можете в любое время проверить свой код с помощью метода dd. Например, поместите метод dd внутри if statment и проверьте, работает ли оператор хорошо? Или поделитесь с нами своим кодом, чтобы помочь вам
Переменная $admin не является ни массивом, ни объектом, реализующим счетный. Когда вы используете first(), результатом будет объект модели, если запись будет найдена, иначе она будет нулевой. Для этого условия вы можете использовать:
if (!empty($admin)) {
//
}
Просто замените if (count($admin)) на if (!empty($admin)).
И когда вы используете метод get() для получения нескольких записей, вы можете проверить:
if ($admins->count() > 0) {
//
}
$admin = null;
var_dump(count($admin));
выход: Предупреждение: count (): Параметр должен быть массивом или объектом, который реализует Countable в… в строке 12 // начиная с PHP 7.2
если условие должно быть таким:
if (isset($admin) && count($admin))
Сэр, я пробую это, но ничего не происходит, просто появляется пустой
Я использую! empty over isset
Well,
$admin=Admin::where('email',$request->email)->first();
//It will always return an **object**.
And make sure you included Admin model in your controller like as.
Use App\Admin;
at the same time check that you will have to mention which field of table needs to be fillable like in your model such as
protected $fillable = [
'first_name',
'last_name'
];
whatever data you will going to save in your database.
and then check object is null or not
I mean is.
if ($admin && $admin!==null){
//do whatver you want to do.
}
Вы упомянули модель администратора в контроллере. и еще одно, что вам нужно сделать, это. $ request-> input ('электронная почта'); сначала сделайте это изменение, а перед тем как продолжить, просто введите эхо "<pre>"; print_r ($ admin);
Нет, сэр, он не работает 1-й, если условие работает, когда оно входит, затем снова, если ($ admin-> status == 0) не работает, его часть else работает, я не знаю, почему возникает ошибка, если часть, почему она не работает
@faraz Значит, теперь вы не получаете ошибку по счету?
Да, потому что я заменяю count на! Empty, и ошибка возникает во внутреннем состоянии if if ($ admin-> status == 0) не работает, а еще условие работает, когда я даю правильный код
Его нельзя сравнивать с нулем, потому что неактивный статус электронной почты равен 0, но когда я использую активную электронную почту, которая еще является частью статуса sith, равной 1, она работает
учетные данные защищенной функции (Request $ request) {$ admin = admin :: where ('email', $ request-> email) -> first (); if (! empty ($ admin)) {if ($ admin-> status) {return ['email' => $ request-> email, 'password' => $ request-> password, 'st atus' => 1]; } else {return ['email' => 'inactive', 'password' => 'Вы не активный человек, обратитесь к администратору']; }} return $ request-> only ($ this-> username (), 'пароль'); }
пытаясь получить значение $ admin-> status, вручную добавив адрес электронной почты в запрос, поэтому вам нужно 2 администратора, один из которых имеет статус 0, а второй - со статусом 1. и выяснить, что вы получаете, и только после этого создайте условие как $ admin-> статус ...
Используйте isset($admin->id) вместо count($admin)
Попробуй это :
protected function credentials(Request $request)
{
$admin=admin::where('email',$request->email)->first();
if (isset($admin->id)))
{
if ($admin->status==0){
return ['email'=>'inactive','password'=>'You are not an active person, Please contact to admin'];
}
else{
return ['email'=>$request->email,'password'=>$request->password,'status'=>1];
}
}
return $request->only($this->username(), 'password');
}
добавьте этот ваш контроллер в этот код:
$user = User::where('email',$request->email)->first();
if ($user){
return redirect()->back()->with('errors','We cant find a user with that e-mail address.');
}else{
$user->password = bcrypt($request->new_password);
$user->update();
return redirect()->back()->with('success','Success');
}
Это происходит из-за того, что в PHP 7.2 NULL в count () return Warning. Вы можете попробовать изменить
count($admin)
к
count((is_countable($admin)?$admin:[]))
Мне это нравится, потому что он работает и без Laravel.
FWIW: is_countable () представлена в PHP7.3.
Это мое решение:
count(array($variable));
надеюсь, что это работает!
Будьте осторожны. Если переменная $ уже является массивом, она будет [[$ переменная]], а количество будет равно 1
Вы получаете первую запись, которая соответствует электронной почте, она никогда не вернет никаких ошибок.