Laravel blade 模板未使用 slug 渲染
Laravel blade template not rendering with slug
嗨,也许我在这里遗漏了一些东西,但是如果我使用
这样的路线
/admin-user-management
然后 blade 模板会正确呈现。但是使用确切的代码,copy/pasted 进入另一个视图与路线
/admin/{id}
然后视图不呈现模板。
两种视图在任何方面都是相同的,一个使用模板正确呈现视图,而另一个使用 slug 的视图将无法正确呈现模板,它会随机吐出元素,但不会呈现实际的布局正确。
为什么它们会不同?这也不是我第一次遇到这个问题了,我只是不知道 URL 中是否有 slug 会有什么区别。
再次强调,这两个文件是相同的。
一个是useraccounts函数,另一个是controller上的show函数。
public function show($id)
{
$user=User::find($id);
return view('admin.show',compact('user'));
}
public function useraccounts()
{
$users = User::all();
return view('admin.useraccounts', compact('users'));
}
显示用户详情的按钮如下
<a href="{{route('admin.show',$user)}}" class="btn btn-primary">View all information</a>
有人对我遇到的这个问题有什么想法吗?
admin.show 观点
@extends('admin')
@section('main')
<aside class="right-side">
<!-- Content Header (Page header) -->
<section class="content-header">
<h1>
Dashboard
<small>Control panel</small>
</h1>
<ol class="breadcrumb">
<li><a href="/admin"><i class="fa fa-dashboard"></i> Home</a></li>
<li class="active">Dashboard</li>
</ol>
</section>
<!-- Main content -->
<section class="content">
<!-- Small boxes (Stat box) -->
<div class="row">
<div class="col-lg-3 col-xs-6">
<!-- small box -->
<div class="small-box bg-green">
<div class="inner">
<h3>
{{--53<sup style="font-size: 20px">%</sup>--}}
</h3>
<p>
Statistics
</p>
</div>
<div class="icon">
<i class="ion ion-stats-bars"></i>
</div>
<a href="#" class="small-box-footer">
View Information <i class="fa fa-arrow-circle-right"></i>
</a>
</div>
</div><!-- ./col -->
<div class="col-lg-3 col-xs-6">
<!-- small box -->
<div class="small-box bg-yellow">
<div class="inner">
<h3>
{{--53--}}
</h3>
<p>
User Management
</p>
</div>
<div class="icon">
<i class="ion ion-person-add"></i>
</div>
<a href="/admin-user-management" class="small-box-footer">
Edit Details <i class="fa fa-arrow-circle-right"></i>
</a>
</div>
</div><!-- ./col -->
<div class="col-lg-3 col-xs-6">
<!-- small box -->
<div class="small-box bg-red">
<div class="inner">
<h3>
{{--65--}}
</h3>
<p>
Detailed Site Information
</p>
</div>
<div class="icon">
<i class="ion ion-pie-graph"></i>
</div>
<a href="#" class="small-box-footer">
View Data <i class="fa fa-arrow-circle-right"></i>
</a>
</div>
</div><!-- ./col -->
</div><!-- /.row -->
<!-- top row -->
<div class="row">
<div class="col-xs-12 connectedSortable">
</div><!-- /.col -->
</div>
</section><!-- /.content -->
<label>{{$user->name}}</label>
</aside><!-- /.right-side -->
@endsection
然后是管理员。admin-user-management 视图正在使用
@extends('admin')
@section('main')
<aside class="right-side">
<!-- Content Header (Page header) -->
<section class="content-header">
<h1>
Dashboard
<small>Control panel</small>
</h1>
<ol class="breadcrumb">
<li><a href="/admin"><i class="fa fa-dashboard"></i> Home</a></li>
<li class="active">Dashboard</li>
</ol>
</section>
<!-- Main content -->
<section class="content">
<!-- Small boxes (Stat box) -->
<div class="row">
<div class="col-lg-3 col-xs-6">
<!-- small box -->
<div class="small-box bg-green">
<div class="inner">
<h3>
{{--53<sup style="font-size: 20px">%</sup>--}}
</h3>
<p>
Statistics
</p>
</div>
<div class="icon">
<i class="ion ion-stats-bars"></i>
</div>
<a href="#" class="small-box-footer">
View Information <i class="fa fa-arrow-circle-right"></i>
</a>
</div>
</div><!-- ./col -->
<div class="col-lg-3 col-xs-6">
<!-- small box -->
<div class="small-box bg-yellow">
<div class="inner">
<h3>
{{--53--}}
</h3>
<p>
User Management
</p>
</div>
<div class="icon">
<i class="ion ion-person-add"></i>
</div>
<a href="#" class="small-box-footer">
Edit Details <i class="fa fa-arrow-circle-right"></i>
</a>
</div>
</div><!-- ./col -->
<div class="col-lg-3 col-xs-6">
<!-- small box -->
<div class="small-box bg-red">
<div class="inner">
<h3>
{{--65--}}
</h3>
<p>
Detailed Site Information
</p>
</div>
<div class="icon">
<i class="ion ion-pie-graph"></i>
</div>
<a href="#" class="small-box-footer">
View Data <i class="fa fa-arrow-circle-right"></i>
</a>
</div>
</div><!-- ./col -->
</div><!-- /.row -->
<!-- top row -->
<div class="row">
<div class="col-xs-12 connectedSortable">
</div><!-- /.col -->
</div>
</section><!-- /.content -->
<div class="container-fluid">
<div class="form-box">
@if (session('message'))
<div class="alert alert-info" style="text-align: center; width: 200px; ">
{{ session('message') }}
</div>
@endif
<div class="container">
{{-- @if(Auth::user()) --}}
<form class="form-group">
@if($users != null)
@foreach($users as $user)
@if($user->admin != 'true')
{!! Form::label($user->name) !!}
<div class="container">
<br>
<a href="{{route('admin.show', ['id' => $user->id])}}" class="btn btn-primary">View all information</a>
</div>
</br>
<div class="container">
{{-- <a href="{{route('house.edit',$house)}}" class="btn btn-primary">Update house details</a> --}}
</div>
<br>
<div class="container">
{{-- {!! Form::open(['method' => 'DELETE', 'route'=>['house.destroy', $house->id]]) !!} --}}
{{-- {!! Form::submit('Delete House', ['class' => 'btn btn-danger']) !!} --}}
{{-- {!! Form::close() !!} --}}
</div>
@endif
@endforeach
@else
{{-- <li><a href={{url('/house/create')}}>Add new house</a></li> --}}
@endif
</form>
{{-- @endif --}}
</div>
</div>
</div>
</aside><!-- /.right-side -->
@endsection
routes.php 文件
//Admin Routes
Route::get('/admin-user-management', 'AdminController@useraccounts');
Route::resource('admin', 'AdminController');
页眉
<head>
<meta charset="UTF-8">
<title>Admin | Dashboard</title>
<meta content='width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no' name='viewport'>
<!-- bootstrap 3.0.2 -->
<link href="bootstrap/css/bootstrap.min.css" rel="stylesheet" type="text/css" />
<!-- font Awesome -->
<link href="bootstrap/css/font-awesome.min.css" rel="stylesheet" type="text/css" />
<!-- Ionicons -->
<link href="bootstrap/css/ionicons.min.css" rel="stylesheet" type="text/css" />
<!-- Morris chart -->
<link href="bootstrap/css/morris/morris.css" rel="stylesheet" type="text/css" />
<!-- jvectormap -->
<link href="bootstrap/css/jvectormap/jquery-jvectormap-1.2.2.css" rel="stylesheet" type="text/css" />
<!-- fullCalendar -->
<link href="bootstrap/css/fullcalendar/fullcalendar.css" rel="stylesheet" type="text/css" />
<!-- Daterange picker -->
<link href="bootstrap/css/daterangepicker/daterangepicker-bs3.css" rel="stylesheet" type="text/css" />
<!-- bootstrap wysihtml5 - text editor -->
<link href="bootstrap/css/bootstrap-wysihtml5/bootstrap3-wysihtml5.min.css" rel="stylesheet" type="text/css" />
<!-- Theme style -->
<link href="bootstrap/css/AdminLTE.css" rel="stylesheet" type="text/css" />
<!-- HTML5 Shim and Respond.js 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/libs/html5shiv/3.7.0/html5shiv.js"></script>
<script src="https://oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js"></script>
<![endif]-->
</head>
你的资产路径是相对的,它们应该是绝对的:
<link href="/bootstrap/css/bootstrap.min.css" rel="stylesheet" type="text/css" />
注意 bootstrap/css/bootstrap.min.css
之前的额外 /
。如果缺少 /
而你的 URL 是 /admin/1
,相对路径是 /admin
,它会尝试找到 bootstrap CSS /admin/bootstrap/css/bootstrap.min.css
中的文件,如果课程不存在。
这里最好的解决方案是在生成任何资产 URL 时使用 asset
辅助函数,因为它会生成一个完整的 URL 包括协议和域,这将避免将来出现任何此类问题,例如:
<link href="{{ asset('bootstrap/css/bootstrap.min.css') }}" rel="stylesheet" type="text/css" />
asset
函数将生成 URL,如下所示:
http://example.com/bootstrap/css/bootstrap.min.css
这意味着位置将始终正确。当然,您应该在从服务器加载所有资产时使用该函数,包括 JavaScript 文件,但不应该在 html5shiv
等外部资源上使用,它是从 maxcdn.com
.
加载的
嗨,也许我在这里遗漏了一些东西,但是如果我使用
这样的路线/admin-user-management
然后 blade 模板会正确呈现。但是使用确切的代码,copy/pasted 进入另一个视图与路线
/admin/{id}
然后视图不呈现模板。
两种视图在任何方面都是相同的,一个使用模板正确呈现视图,而另一个使用 slug 的视图将无法正确呈现模板,它会随机吐出元素,但不会呈现实际的布局正确。
为什么它们会不同?这也不是我第一次遇到这个问题了,我只是不知道 URL 中是否有 slug 会有什么区别。
再次强调,这两个文件是相同的。
一个是useraccounts函数,另一个是controller上的show函数。
public function show($id)
{
$user=User::find($id);
return view('admin.show',compact('user'));
}
public function useraccounts()
{
$users = User::all();
return view('admin.useraccounts', compact('users'));
}
显示用户详情的按钮如下
<a href="{{route('admin.show',$user)}}" class="btn btn-primary">View all information</a>
有人对我遇到的这个问题有什么想法吗?
admin.show 观点
@extends('admin')
@section('main')
<aside class="right-side">
<!-- Content Header (Page header) -->
<section class="content-header">
<h1>
Dashboard
<small>Control panel</small>
</h1>
<ol class="breadcrumb">
<li><a href="/admin"><i class="fa fa-dashboard"></i> Home</a></li>
<li class="active">Dashboard</li>
</ol>
</section>
<!-- Main content -->
<section class="content">
<!-- Small boxes (Stat box) -->
<div class="row">
<div class="col-lg-3 col-xs-6">
<!-- small box -->
<div class="small-box bg-green">
<div class="inner">
<h3>
{{--53<sup style="font-size: 20px">%</sup>--}}
</h3>
<p>
Statistics
</p>
</div>
<div class="icon">
<i class="ion ion-stats-bars"></i>
</div>
<a href="#" class="small-box-footer">
View Information <i class="fa fa-arrow-circle-right"></i>
</a>
</div>
</div><!-- ./col -->
<div class="col-lg-3 col-xs-6">
<!-- small box -->
<div class="small-box bg-yellow">
<div class="inner">
<h3>
{{--53--}}
</h3>
<p>
User Management
</p>
</div>
<div class="icon">
<i class="ion ion-person-add"></i>
</div>
<a href="/admin-user-management" class="small-box-footer">
Edit Details <i class="fa fa-arrow-circle-right"></i>
</a>
</div>
</div><!-- ./col -->
<div class="col-lg-3 col-xs-6">
<!-- small box -->
<div class="small-box bg-red">
<div class="inner">
<h3>
{{--65--}}
</h3>
<p>
Detailed Site Information
</p>
</div>
<div class="icon">
<i class="ion ion-pie-graph"></i>
</div>
<a href="#" class="small-box-footer">
View Data <i class="fa fa-arrow-circle-right"></i>
</a>
</div>
</div><!-- ./col -->
</div><!-- /.row -->
<!-- top row -->
<div class="row">
<div class="col-xs-12 connectedSortable">
</div><!-- /.col -->
</div>
</section><!-- /.content -->
<label>{{$user->name}}</label>
</aside><!-- /.right-side -->
@endsection
然后是管理员。admin-user-management 视图正在使用
@extends('admin')
@section('main')
<aside class="right-side">
<!-- Content Header (Page header) -->
<section class="content-header">
<h1>
Dashboard
<small>Control panel</small>
</h1>
<ol class="breadcrumb">
<li><a href="/admin"><i class="fa fa-dashboard"></i> Home</a></li>
<li class="active">Dashboard</li>
</ol>
</section>
<!-- Main content -->
<section class="content">
<!-- Small boxes (Stat box) -->
<div class="row">
<div class="col-lg-3 col-xs-6">
<!-- small box -->
<div class="small-box bg-green">
<div class="inner">
<h3>
{{--53<sup style="font-size: 20px">%</sup>--}}
</h3>
<p>
Statistics
</p>
</div>
<div class="icon">
<i class="ion ion-stats-bars"></i>
</div>
<a href="#" class="small-box-footer">
View Information <i class="fa fa-arrow-circle-right"></i>
</a>
</div>
</div><!-- ./col -->
<div class="col-lg-3 col-xs-6">
<!-- small box -->
<div class="small-box bg-yellow">
<div class="inner">
<h3>
{{--53--}}
</h3>
<p>
User Management
</p>
</div>
<div class="icon">
<i class="ion ion-person-add"></i>
</div>
<a href="#" class="small-box-footer">
Edit Details <i class="fa fa-arrow-circle-right"></i>
</a>
</div>
</div><!-- ./col -->
<div class="col-lg-3 col-xs-6">
<!-- small box -->
<div class="small-box bg-red">
<div class="inner">
<h3>
{{--65--}}
</h3>
<p>
Detailed Site Information
</p>
</div>
<div class="icon">
<i class="ion ion-pie-graph"></i>
</div>
<a href="#" class="small-box-footer">
View Data <i class="fa fa-arrow-circle-right"></i>
</a>
</div>
</div><!-- ./col -->
</div><!-- /.row -->
<!-- top row -->
<div class="row">
<div class="col-xs-12 connectedSortable">
</div><!-- /.col -->
</div>
</section><!-- /.content -->
<div class="container-fluid">
<div class="form-box">
@if (session('message'))
<div class="alert alert-info" style="text-align: center; width: 200px; ">
{{ session('message') }}
</div>
@endif
<div class="container">
{{-- @if(Auth::user()) --}}
<form class="form-group">
@if($users != null)
@foreach($users as $user)
@if($user->admin != 'true')
{!! Form::label($user->name) !!}
<div class="container">
<br>
<a href="{{route('admin.show', ['id' => $user->id])}}" class="btn btn-primary">View all information</a>
</div>
</br>
<div class="container">
{{-- <a href="{{route('house.edit',$house)}}" class="btn btn-primary">Update house details</a> --}}
</div>
<br>
<div class="container">
{{-- {!! Form::open(['method' => 'DELETE', 'route'=>['house.destroy', $house->id]]) !!} --}}
{{-- {!! Form::submit('Delete House', ['class' => 'btn btn-danger']) !!} --}}
{{-- {!! Form::close() !!} --}}
</div>
@endif
@endforeach
@else
{{-- <li><a href={{url('/house/create')}}>Add new house</a></li> --}}
@endif
</form>
{{-- @endif --}}
</div>
</div>
</div>
</aside><!-- /.right-side -->
@endsection
routes.php 文件
//Admin Routes
Route::get('/admin-user-management', 'AdminController@useraccounts');
Route::resource('admin', 'AdminController');
页眉
<head>
<meta charset="UTF-8">
<title>Admin | Dashboard</title>
<meta content='width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no' name='viewport'>
<!-- bootstrap 3.0.2 -->
<link href="bootstrap/css/bootstrap.min.css" rel="stylesheet" type="text/css" />
<!-- font Awesome -->
<link href="bootstrap/css/font-awesome.min.css" rel="stylesheet" type="text/css" />
<!-- Ionicons -->
<link href="bootstrap/css/ionicons.min.css" rel="stylesheet" type="text/css" />
<!-- Morris chart -->
<link href="bootstrap/css/morris/morris.css" rel="stylesheet" type="text/css" />
<!-- jvectormap -->
<link href="bootstrap/css/jvectormap/jquery-jvectormap-1.2.2.css" rel="stylesheet" type="text/css" />
<!-- fullCalendar -->
<link href="bootstrap/css/fullcalendar/fullcalendar.css" rel="stylesheet" type="text/css" />
<!-- Daterange picker -->
<link href="bootstrap/css/daterangepicker/daterangepicker-bs3.css" rel="stylesheet" type="text/css" />
<!-- bootstrap wysihtml5 - text editor -->
<link href="bootstrap/css/bootstrap-wysihtml5/bootstrap3-wysihtml5.min.css" rel="stylesheet" type="text/css" />
<!-- Theme style -->
<link href="bootstrap/css/AdminLTE.css" rel="stylesheet" type="text/css" />
<!-- HTML5 Shim and Respond.js 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/libs/html5shiv/3.7.0/html5shiv.js"></script>
<script src="https://oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js"></script>
<![endif]-->
</head>
你的资产路径是相对的,它们应该是绝对的:
<link href="/bootstrap/css/bootstrap.min.css" rel="stylesheet" type="text/css" />
注意 bootstrap/css/bootstrap.min.css
之前的额外 /
。如果缺少 /
而你的 URL 是 /admin/1
,相对路径是 /admin
,它会尝试找到 bootstrap CSS /admin/bootstrap/css/bootstrap.min.css
中的文件,如果课程不存在。
这里最好的解决方案是在生成任何资产 URL 时使用 asset
辅助函数,因为它会生成一个完整的 URL 包括协议和域,这将避免将来出现任何此类问题,例如:
<link href="{{ asset('bootstrap/css/bootstrap.min.css') }}" rel="stylesheet" type="text/css" />
asset
函数将生成 URL,如下所示:
http://example.com/bootstrap/css/bootstrap.min.css
这意味着位置将始终正确。当然,您应该在从服务器加载所有资产时使用该函数,包括 JavaScript 文件,但不应该在 html5shiv
等外部资源上使用,它是从 maxcdn.com
.