Я сделал новостной сайт laravel. я пытался добавить авторизацию, выполнив make:auth, но когда я нажимаю кнопку входа или регистрации, это дает мне такую ошибку:
я не знаю, откуда это идет. это относится к функции в моем контроллере, но я не знаю, почему, потому что эта функция вообще не нужна. у меня обычно не бывает ошибок при добавлении авторизации. может кто сталкивался с такой же проблемой или кто знает как это исправить?
app.blade.php
<html lang = "{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
<meta charset = "utf-8">
<meta name = "viewport" content = "width=device-width, initial-scale=1">
<!-- CSRF Token -->
<meta name = "csrf-token" content = "{{ csrf_token() }}">
<link rel = "stylesheet" href = "{{asset('css/app.css')}}">
<link rel = "stylesheet" href = "{{asset('css/custom.css')}}">
<link href = "https://fonts.googleapis.com/css?family=Montserrat" rel = "stylesheet">
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link href = "//maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" rel = "stylesheet" id = "bootstrap-css">
<link rel = "stylesheet" href = "https://use.fontawesome.com/releases/v5.7.2/css/all.css" integrity = "sha384-fnmOCqbTlWIlj8LyTjo7mOUStjsKC4pOpQbqyi7RrhN7udi9RwhKkMHpvLbHG9Sr" crossorigin = "anonymous">
<title>{{config('app.name', 'News')}}</title>
</head>
<body>
@include('inc.navbar')
@include('inc.messages')
@yield('content')
@include('inc.footer')
</body>
navbar.blade.php
<header>
<div class = "container-fluid">
<div class = "row headercontent">
<div class = "col-md-3 offset-md-1 borderbottom">
</div>
<div class = "col-md-4 borderbottom header-logo bg-white">
<a href = "{{url('/')}}"><img class = "high-pic"
src = "https://upload.wikimedia.org/wikipedia/commons/7/77/The_New_York_Times_logo.png"
style = "width: 100%;"></a>
</div>
<div class = "col-md-3 search">
<span class = "fas fa-search"></span>
<input type = "text" class = "borderbottom backgroundtextinput"
style = "position:absolute; bottom:0; width:80%;outline:none;">
</div>
</div>
<div class = "row logo-NY">
<div class = "col-md-6 offset-md-3 borderbottom header-logo bg-white">
<div style = "z-index:3000;"></div>
<a href = "{{url('/')}}"><img class = "high-pic"
src = "https://upload.wikimedia.org/wikipedia/commons/7/77/The_New_York_Times_logo.png"
style = "width: 100%;"></a>
</div>
<div class = "col-md-3">
<div id = "clickme" class = "d-lg-none">
<i class = "fas fa-arrow-down"></i>
</div>
</div>
<div class = "col-md-3">
</div>
</div>
</div>
<div class = "desktop-nav">
<nav class = "navbar navbar-expand-lg navbar-light font">
<div class = "container">
<div class = "" id = "navbarSupportedContent" style = "margin:auto;">
<div class = "navbar-flex fontcolorblack">
@foreach($categories_navbar as $item)
<div class = "nav-item">
<a class = "nav-link bold" href = "{{url($item->naam)}}">{{ucfirst($item->naam)}}</a>
</div>
@endforeach
@guest
<li class = "nav-item">
<a class = "nav-link" href = "{{ route('login') }}">{{ __('Login') }}</a>
</li>
@if (Route::has('register'))
<li class = "nav-item">
<a class = "nav-link" href = "{{ route('register') }}">{{ __('Register') }}</a>
</li>
@endif
@else
<li class = "nav-item dropdown">
<a id = "navbarDropdown" class = "nav-link dropdown-toggle" href = "#" role = "button" data-toggle = "dropdown" aria-haspopup = "true" aria-expanded = "false" v-pre>
{{ Auth::user()->name }} <span class = "caret"></span>
</a>
<div class = "dropdown-menu dropdown-menu-right" aria-labelledby = "navbarDropdown">
<a class = "dropdown-item" href = "{{ route('logout') }}"
onclick = "event.preventDefault();
document.getElementById('logout-form').submit();">
{{ __('Logout') }}
</a>
<form id = "logout-form" action = "{{ route('logout') }}" method = "POST" style = "display: none;">
@csrf
</form>
</div>
</li>
@endguest
</div>
</div>
</div>
</nav>
</div>
<div id = "mobile-nav" style = "width: 100%; display: none; background-color: #2e3192; color: #fff;">
<div id = "closeme" class = "d-lg-none">
<i class = "fas fa-times fa-2x"></i>
</div>
<nav class = "navbar navbar-light bg-light fixed-top d-lg-none" style = "z-index:999;">
<ul class = "navbar-nav mr-auto">
<a href = "{{url('/')}}"><img class = "high-pic"
src = "https://upload.wikimedia.org/wikipedia/commons/7/77/The_New_York_Times_logo.png"
style = "width: 100%;"></a>
@foreach($categories_navbar as $item)
<div class = "nav-item">
<a class = "nav-link bold" href = "{{url($item->naam)}}">{{ucfirst($item->naam)}}</a>
</div>
@endforeach
<form class = "form-inline my-2 my-lg-0" id = "search_mobile" action = "search" method = "get">
<input class = "form-control mr-sm-2" name = "search" type = "search" placeholder = "Search..."
aria-label = "Search">
</form>
@guest
<li class = "nav-item">
<a class = "nav-link" href = "{{ route('login') }}">{{ __('Login') }}</a>
</li>
@if (Route::has('register'))
<li class = "nav-item">
<a class = "nav-link" href = "{{ route('register') }}">{{ __('Register') }}</a>
</li>
@endif
@else
<li class = "nav-item dropdown">
<a id = "navbarDropdown" class = "nav-link dropdown-toggle" href = "#" role = "button" data-toggle = "dropdown" aria-haspopup = "true" aria-expanded = "false" v-pre>
{{ Auth::user()->name }} <span class = "caret"></span>
</a>
<div class = "dropdown-menu dropdown-menu-right" aria-labelledby = "navbarDropdown">
<a class = "dropdown-item" href = "{{ route('logout') }}"
onclick = "event.preventDefault();
document.getElementById('logout-form').submit();">
{{ __('Logout') }}
</a>
<form id = "logout-form" action = "{{ route('logout') }}" method = "POST" style = "display: none;">
@csrf
</form>
</div>
</li>
@endguest
</ul>
</nav>
</div>
</header>






Мне кажется, что проблема на самом деле в строке выше.
$category = Categorie::where('naam',$category)->first();
Эта строка не возвращает никаких данных. Попробуйте поставить dd($category) после этой строки, чтобы проверить, действительно ли существует категория с вашим запросом.
спасибо за ответ, кстати, он возвращает «ноль». ты хоть представляешь, где я должен искать, что изменить?
Вам нужно проверить параметр запроса и маршрут
Есть 2 переменные с одинаковым именем ($category). Один передается как переменная. (Я имел в виду oversight($category))... Также после запроса вы помещаете результат в переменную $category. Это очень плохая практика.
Возможно, вы пытаетесь получить доступ к несуществующей категории, эта страница должна возвращать ошибку 404.
после $category = Categorie::where('naam',$category)->first();
добавить строку
abort_if (is_null($category), 404);
и он вернет ошибку 404, как и должно быть.
спасибо за решение, он переходит на 404 не найден, но все еще не переходит на страницу входа в систему
Я добавил новый маршрут к /login и /register в web.php и теперь все работает!
Попробуйте отлаживать так,
public function oversight($category){
try{
$getCategory = Categorie::where('naam',$category)->first();
if ($getCategory !== null){
dd("I GOT SELECTED CATEGORY ROW");
}else{
dd("I THINK THERE IS NO DATA AVAIALBLE BASED ON WHERE Condition");
}
dd("ALL FINE I AM GOING BACK TO VIEW WITH DATA");
}catch(\Exception $e){
dd("I GOT THIS ERROR : ".$e->getMessage());
}
}
Я уверен, что вы сможете исправить проблему этим.
Как заявил Нарбил Фархан, проблема в строчке:
$category = Categorie::where('naam',$category)->first();
Кажется, вы не получаете никакого результата из таблицы категорий. Первая проблема может заключаться в том, что таблицы не существует, обратите внимание, что Laravel ищет таблицу «Категории» (ищет название модели + s). Вероятно, вам следует поймать ошибку, если данные не возвращаются, как предложил Nevermind23.
if (isset($category->id) && $category->id != ""){
$artikels = Artikel::where('category_id', $category->id)->get()
}
Личное примечание: старайтесь не программировать на своем родном языке. Тем, кто не говорит по-голландски, сложнее понять ваш код.
спасибо за решение. насчет заметки, я знаю, что не создавал ее сам, я дал коллеге такую же критику
Есть несколько решений:
$category = Categorie::where('naam', $category)->first();
if (#category){
//you can get the $artikels belonging to the category
}
В этом случае, если нет категории с соответствующим именем, $category будет нулевой, и код внутри оператора IF не будет выполнен.
$category = Categorie::where('naam', $category)->firstOrFail();
//you can get the $artikels belonging to the category
В этом случае, если Категория не найдена, будет выброшен Illuminate\Database\Eloquent\ModelNotFoundException. Если исключение не перехвачено, пользователю автоматически отправляется ответ 404 HTTP.
public function oversight(Categorie $category) {
return view('pages.oversight', ['category'=>$category]);
}
В этом случае, если нет категории с соответствующим именем/идентификатором, пользователю автоматически отправляется ответ 404 HTTP.
Кроме того, я бы посоветовал вам создать (скорее всего OneToMany) отношение между моделями Categorie и Artikel. Это сделает вашу жизнь намного проще :)
Вы вносили какие-либо изменения в файлы аутентификации?