Maximum function nesting level laravel 5 blade multilevel nesting - laravel

I need your help because I have this error when I try to extends a template which extends another one.
Maximum function nesting level of '100' reached, aborting!
writer/dashboard.blade.php
#extends('user.dashboard')
#section('writer-dashboard')
<li><i class="glyphicon glyphicon-calendar"></i>Calendrier</li>
#endsection
user/dashboard.blade.php
#extends('layouts.app')
#section('content')
<div class="row dashboard">
<aside class="col-xs-12 col-lg-2 content-box-large">
<ul class="nav">
<li class="current"><i class="glyphicon glyphicon-home"></i>Dashboard</li>
<li><i class="fa fa-user"></i>Profil</li>
<li><i class="fa fa-graduation-cap"></i>Cours</li>
#yield('writer-dashboard')
</ul>
</aside>
#endsection
layouts/app.blade.php
<!doctype html>
<html lang="fr">
<head>
</head>
<body>
#yield('content')
</body>
</html>

You are creating infinite loop. Check:
In dashboard.blade.php you yield for writer-dashboard template. That template call again dashboard and dashboard call again writer-dashboard.
Instead of #yield directive, use #include. Look for Including Sub-Views in Control Structures' section.

Related

How to change the language of layouts using the Laravel localization tool?

I'm using Laravel's localization tool to change the language of my application (English and French). The change of language is done thanks to a select in the navigation bar.
With the official doc I use the routes, the controllers and the blades to change the language of the content of the pages.
However, I can't change the language of the layouts (footer and navbar links). Normally I create routes for my pages and point to the controller that contains the changeLang method. But I can't create route and controller for layouts because layouts concern all pages and therefore all routes. I'm new to Laravel so.. be indulgent :) thank you very much ^^
I've already searched a lot on StackOverflow and I haven't found anything that looks like my problem. Thank you to all of you!
BASIC METHOD (which works well FOR PAGES)
routes/web.php
Route::group([ 'middleware' => 'Language'], function () {
Route::get('/',"\App\Http\Controllers\HomeController#index");
Route::get('/change-language/{lang}',"\App\Http\Controllers\HomeController#changeLang");
});
app/Http/Middlewares/Language
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\App;
class Language
{
/**
* Handle an incoming request.
*
* #param \Illuminate\Http\Request $request
* #param \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse) $next
* #return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse
*/
public function handle(Request $request, Closure $next)
{
if(session()->has("lang_code")){
App::setLocale(session()->get("lang_code"));
}
return $next($request);
}
}
app/Http/Controllers/HomeController
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\App;
class HomeController extends Controller
{
public function index(){
return view("home");
}
public function changeLang($langcode){
App::setLocale($langcode);
session()->put("lang_code",$langcode);
return redirect()->back();
}
}
resources/views/home.blade.php (data come from resources/lang/en/home (or /fr/home))
#include('layouts/navbar')
<div class="container-fluid ">
<div class=""><img class="presentation-img " src="{{ asset('images/presentation.jpg') }}" alt="myself"></div>
<div class="presentation-paragraph zoomIn">
<h1>{{__("messages.title")}} </h1> <br>
<p class="paragraph">{!! trans('messages.presentation')!!}
</p>
</div>
</div>
#include ('layouts/footer')
<script>
function changeLanguage(lang){
window.location='{{url("change-language")}}/'+lang;
}
</script>
WHAT I HAVE TRIED TO DO FOR LAYOUTS (which doesn't work) (data come from resources/lang/en/navbar (or /fr/navbar))
resources/views/layouts/navbar.blade.php
<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
<meta charset="utf-8">
<meta name="description" content="Portfolio" />
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Mon Portfolio</title>
<link rel="shortcut icon" sizes="114x114" href="{{ asset('images/favicon.ico') }}">
<!-- Styles -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">
</head>
<body class="antialiased">
<nav id="mainNav" class="navbar navbar-expand-lg py-lg-4 navbar-dark" style="padding: 23px 0px;">
<div class="absolute-select">
<select class="absolute-select-select" onchange="changeLanguage(this.value)" >
<option {{session()->has('lang_code')?(session()->get('lang_code')=='en'?'selected':''):''}} value="en">
<img src="{{ asset('images/flags/english.png') }}" />
English
</option>
<option {{session()->has('lang_code')?(session()->get('lang_code')=='fr'?'selected':''):''}} value="fr">
<img src="{{ asset('images/flags/french.png') }}" />
French
</option>
</select>
</div>
<div class="container">
<img class="logo-img " src="{{ asset('images/logo.png') }}" alt="logo ">
<button class="navbar-toggler navbar-toggler-right" data-bs-toggle="collapse" data-bs-target="#navbarResponsive"><span class="navbar-toggler-icon"></span></button>
<div id="navbarResponsive" class="collapse navbar-collapse">
<ul class="navbar-nav flex-grow-1 justify-content-evenly">
<li class="nav-item">
<a class="nav-link" href="/">{{__("navbar.one")}}</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/projets">{{__("navbar.two")}}</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/competences">{{__("navbar.three")}}</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/apropos">{{__("navbar.four")}}</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/contact">{{__("navbar.five")}}</a>
</li>
</ul>
</div>
</div>
</nav>
<script>
function changeLanguage(lang){
window.location='{{url("change-language")}}/'+lang;
}
</script>
On my page the content is not displayed. I get these navbar links :
Should I create a route/ a controller for layouts? I thought only the script in the blade was enough because the navbar and the footer are included in all pages... But I'm missing something to make it work!
Sorry if my question is a bit long and for my intermediate level of English.
Due to your comment, I think you should log your locale in the blade and send your result here.
like this :
{{ Config::get('app.locale') }}
I think you forgot to define lang
/lang
/en
navbar.php
/fr
navbar.php

[Vue warn]: Error compiling template:

I have already asked this question already(closed due to inactivity) and I have been trying many different methods to solve it but it still doesn't work. I even try removing all those related to vue inside laravel by following many different kind of website where they all told me to remove the vue dependency. (here is one of the link that I followed, https://mattstauffer.com/blog/removing-all-vue-dependencies-from-laravel/) I even replaced the app.js with a new one created from scratch since in the past I didn't do anything to it
Can somebody please help me, I am stuck in this problem for quite a long time already and I really don't know what to do. All I want is to solve this error "[Vue warn]: Error compiling template:" since it is affecting the navbar in my webpage
I am using laravel framework 5.5.7 and I didn't even update my laravel to get until this vue. And also I don't even recall installing vue into my laravel.
This is the error they given me:
- Templates should only be responsible for mapping the state to the UI. Avoid placing tags with side-effects in your templates, such as <script>, as they will not be parsed.
- Templates should only be responsible for mapping the state to the UI. Avoid placing tags with side-effects in your templates, such as <script>, as they will not be parsed.
- Templates should only be responsible for mapping the state to the UI. Avoid placing tags with side-effects in your templates, such as <script>, as they will not be parsed.
(found in <Root>)
app.blade.php
<!DOCTYPE html>
<html lang="{{ app()->getLocale() }}">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- CSRF Token -->
<meta name="csrf-token" content="{{ csrf_token() }}">
<title>{{ config('app.name', 'Laravel') }}</title>
<!-- Styles -->
<link href="{{ asset('css/app.css') }}" rel="stylesheet">
</head>
<body>
<div id="app">
<nav class="navbar navbar-default navbar-static-top">
<div class="container">
<div class="navbar-header">
<!-- Collapsed Hamburger -->
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#app-navbar-collapse" aria-expanded="false">
<span class="sr-only">Toggle Navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<html>
<head>
<title>SideBar Menu</title>
<link href="{{ asset('css/style.css') }}" rel="stylesheet">
</head>
<body>
<div id="sidebar">
<ul>
<li>Summary</li>
<li>Deleted Records</li>
<li class="dropdown">
Edit User Information <span class="caret"></span>
<ul class="dropdown-menu forAnimate" role="menu">
<li>Personal Information Edit</li>
<li>Driver License Class Edit</li>
</ul>
</li>
<li class="dropdown">
Evaluation <span class="caret"></span>
<ul class="dropdown-menu forAnimate" role="menu">
<li>Evaluation</li>
</ul>
</li>
</ul>
<div id="sidebar-btn">
<span></span>
<span></span>
<span></span>
</div>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script>
$(document).ready(function(){
$('#sidebar-btn').click(function(){
$('#sidebar').toggleClass('visible');
});
});
</script>
</body>
</html>
<!-- Branding Image -->
<a class="navbar-brand" href="{{ url('/') }}" style="color: white">
{{ config('app.name', 'Laravel') }}
</a>
</div>
<div class="collapse navbar-collapse" id="app-navbar-collapse">
<!-- Left Side Of Navbar -->
<ul class="nav navbar-nav">
</ul>
<div id="center-text">
<ul class="nav navbar-nav navbar-center" id="nav-center">
<li>
<h3>#yield('title')</h3>
</li>
</ul>
</div>
<!-- Right Side Of Navbar -->
<ul class="nav navbar-nav navbar-right">
<!-- Authentication Links -->
#guest
<li>Login</li>
<li>Register</li>
#else
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false" aria-haspopup="true" style="background-color:blue" style="color:white">
<b>{{ Auth::user()->name }}</b> <span class="caret"></span>
</a>
<ul class="dropdown-menu" style="background-color: blue">
<li>
<a href="{{ route('logout') }}"
onclick="event.preventDefault();
document.getElementById('logout-form').submit();" style="background-color: blue" style="color: white">
<b>Logout</b>
</a>
<form id="logout-form" action="{{ route('logout') }}" method="POST" style="display: none;">
{{ csrf_field() }}
</form>
</li>
</ul>
</li>
#endguest
</ul>
</div>
</div>
</nav>
#yield('content')
</div>
<!-- Scripts -->
<script src="{{ asset('js/app.js') }}"></script>
</body>
</html>

anchor tag not working on laravel 5.2

I wont to make direct page with anchor tag in blade template engine, but its not work.
_sidebar.blade.php
<li class="active treeview">
<a href="{{ url('/') }}">
<i class="fa fa-dashboard"></i> <span>Menu Utama</span>
</a>
</li>
<li class="treeview">
<a href="{{ url('data_jamaah') }}">
<i class="fa fa-users"></i>
<span>Data Jamaah</span>
</a>
routes.php
Route::get('/', 'PagesController#getIndex');
Route::get('data_jamaah', 'PagesController#getJamaah');
PagesController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Inbox;
class PagesController extends Controller
{
public function getIndex() {
return view('pages.index');
}
public function getJamaah() {
return view('pages.data_jamaah');
}
}
The problem is When i click a nothing to happen, thanks for your help
Edit:
This is main.blade.php
<!DOCTYPE html>
<html lang="en">
<head>
#include('partials._head')
#yield('stylesheets')
</head>
<body class="hold-transition skin-blue sidebar-mini">
<div class="wrapper">
#include('partials._nav')
#include('partials._sidebar')
#yield('content')
<footer class="main-footer">
#include('partials._footer')
</footer>
</div>
#include('partials._javascript')
#yield('javascripts')
</body>
</html>
Your issue is coming from of how you are using adminLTE Sidebar.
When you specify treeview in your class, you will have a dropdown list. And the anchor will be deactivated.
So try something like that :
<li class="active">
<a href="{{ url('/') }}">
<i class="fa fa-dashboard"></i> <span>Menu Utama</span>
</a>
</li>
<li>
<a href="{{ url('data_jamaah') }}">
<i class="fa fa-users"></i>
<span>Data Jamaah</span>
</a>
</li>
I think you can try this hope this work for you:
Route::get('/', 'PagesController#getIndex')->name('home');
Route::get('data_jamaah', 'PagesController#getJamaah')->name('dataJamaah');
<li class="active treeview">
<a href="{{route('home')}}">
<i class="fa fa-dashboard"></i> <span>Menu Utama</span>
</a>
</li>
<li class="treeview">
<a href="{{route('dataJamaah')}}">
<i class="fa fa-users"></i>
<span>Data Jamaah</span>
</a>
Laravel has it's own helper function to create the routes, which you can see here:
https://laravel.com/docs/5.4/helpers#method-route
Edit:
You also need to have a name for your routes to work from the helper function.
On your routes.php:
Route::get('/', ['uses' => 'PagesController#getIndex', 'as' => 'homepage']);
Route::get('data_jamaah', ['uses' => 'PagesController#getJamaah', 'as' => 'data.jamaah']);
You need to change the href from url() to route().
Change
From:
<a href="{{ url('/') }}">
To:
<a href="{{ route('homepage') }}">
and for other route
From:
<a href="{{ url('data_jamaah') }}">
To:
<a href="{{ route('data.jamaah') }}">
And it will work perfectly fine.
If we specify the name the laravel routes automatically gets the route and renders for you.

Undefined variable: users

I'm trying to show users in my view, but i have this error Undefined variable: users
I don't know what is the problem, because in my controller for that view the user method is called.
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\User;
use App\Role;
use App\Http\Requests;
class pagesController extends Controller
{
public function viewIndex(){
$users = User::all();
return view('index', ['users' => $users]);
//return view('index');
}
}
And this is the route where my controller is called
Route::get('/index', [
'uses' => 'pagesController#getIndex',
'as' => 'admin',
'middleware' => 'roles',
'roles' => ['Admin']
]);
This is my blade file
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
<title>Laravel Blog</title>
<!-- CHANGE THIS TITLE FOR EACH PAGE -->
<!-- Bootstrap -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" integrity="sha384-1q8mTJOASx8j1Au+a5WDVnPi2lkFfwwEAa8hDDdjZlpLegxhjVME1fgjWPGmkzs7" crossorigin="anonymous">
<!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
<![endif]-->
</head>
<body>
<!-- Default Bootstrap Navbar -->
<nav class="navbar navbar-default navbar-static-top">
<div class="container">
<div class="navbar-header">
<!-- Collapsed Hamburger -->
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#app-navbar-collapse">
<span class="sr-only">Toggle Navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<!-- Branding Image -->
<a class="navbar-brand" href="{{ url('/') }}">
{{ config('app.name', 'Laravel') }}
</a>
</div>
<div class="collapse navbar-collapse" id="app-navbar-collapse">
<!-- Left Side Of Navbar -->
<ul class="nav navbar-nav">
<li class="active">Home</li>
<li>About</li>
<li>Contact</li>
</ul>
<!-- Right Side Of Navbar -->
<ul class="nav navbar-nav navbar-right">
<!-- Authentication Links -->
#if (Auth::guest())
<li><a class="btn btn-default" href="{{ url('/login') }}">Login</a></li>
<li><a class="btn btn-default" href="{{ url('/register') }}">Register</a></li>
#else
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">
{{ Auth::user()->name }} <span class="caret"></span>
</a>
<ul class="dropdown-menu" role="menu">
#foreach($users as $user)
#if($user->hasRole('Admin'))
<li>Edit users</li>
<li>
<a href="{{ url('/logout') }}"
onclick="event.preventDefault();
document.getElementById('logout-form').submit();">
Logout
</a>
<form id="logout-form" action="{{ url('/logout') }}" method="POST" style="display: none;">
{{ csrf_field() }}
</form>
</li>
#else
<li>Edit page</li>
<li>
<a href="{{ url('/logout') }}"
onclick="event.preventDefault();
document.getElementById('logout-form').submit();">
Logout
</a>
<form id="logout-form" action="{{ url('/logout') }}" method="POST" style="display: none;">
{{ csrf_field() }}
</form>
</li>
#endif
#endforeach
</ul>
</li>
#endif
</ul>
</div>
</div>
</nav>
<div class="container">
<div class="row">
<div class="col-md-12">
<div class="jumbotron">
<h1>Welcome to My Blog!</h1>
<p class="lead">Thank you so much for visiting. This is my test website built with Laravel. Please read my popular post!</p>
</div>
</div>
</div>
</div>
<!-- end of .container -->
<!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<!-- Include all compiled plugins (below), or include individual files as needed -->
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js" integrity="sha384-0mSbJDEHialfmuBBQP6A4Qrprq5OVfW37PRR3j5ELqxss1yVqOtnepnHVP9aJ7xS" crossorigin="anonymous"></script>
</body>
</html>
Any ideas?
I think you're pointing to wrong controller method in your routes.
Your route will be:
Route::get('/index', [
'uses' => 'pagesController#viewIndex',
'as' => 'admin',
'middleware' => 'roles',
'roles' => ['Admin']
]);
and your controller (pagesController) will go like this:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\User;
use App\Role;
use App\Http\Requests;
class pagesController extends Controller
{
public function viewIndex(){
$users = User::all();
return view('index', compact('users'));
}
}
I think this will help to solve your problem.
Note: Please follow the naming conventions in your code so that it would be easy to understand and some frameworks (like laravel itself) runs on some followed conventions.
Thanks!

Bootstrap dropdown won't work

I've been messing around with my website for a while now and can't seem to get the dropdown on my navigation to actually drop down. I've read a few questions regarding this and couldn't find something that was this specific.
I have my .js file installed and everything is linked up (as far as I know)
<script src="/js/bootstrap.js" type="text/javascript"></script>
<script src="/js/bootstrap.min.js" type="text/javascript"></script>
<body>
<div class="navbar navbar-inverse navbar-fixed-top">
<div class="navbar-inner">
<div class="container">
<a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</a>
<a class="brand" href="bootstrapindex.html">Student Food</a>
<div class="nav-collapse collapse">
<ul class="nav">
<li class="active">Home</li>
**<li>About</li>
<li class="dropdown">
Recipes<b class="caret"></b>
<ul class="dropdown-menu">
<li>Featured</li>
<li>Latest</li>
<li>Something else here</li>**
</ul>
</li>
</ul>
Can't seem to see why this won't work. If anyone could help that would be amazing.
You're including the Bootstrap JavaScript twice.
Remove one of the following lines:
<script src="/js/bootstrap.js" type="text/javascript"></script>
<script src="/js/bootstrap.min.js" type="text/javascript"></script>
bootstrap.min.js is just a minified version of bootstrap.js; it's the same code.
Try to remove wrapping div <div class="nav-collapse collapse">. I think, dropdown could be hidden by overflow (it was hidden, when I copy-pasted your code snippet).

Resources