视图中的Laravel子菜单
您好,我对Laravel和MVC框架一般来说都是新手,我希望创建一个链接列表(在模板中的视图中),链接到一些内容。我用它来显示九个人的列表,并在点击链接时显示他们的个人资料描述。我已经创建了一个页面外观模型。我关心的部分是蓝色的。有没有办法将这些链接发送到类似于/about/link2或/about?link2的位置,同时保持相同的页面结构,但修改“链接内容”部分(在链接菜单的右侧)以显示特定链接的内容?如果有人能给我指出正确的方向,我将不胜感激,因为我根本不知道该往哪里走 此处假设没有发布代码,并假设您使用的是最新版本的Laravel,Laravel 5 假设数据库中有一个名为视图中的Laravel子菜单,laravel,model-view-controller,Laravel,Model View Controller,您好,我对Laravel和MVC框架一般来说都是新手,我希望创建一个链接列表(在模板中的视图中),链接到一些内容。我用它来显示九个人的列表,并在点击链接时显示他们的个人资料描述。我已经创建了一个页面外观模型。我关心的部分是蓝色的。有没有办法将这些链接发送到类似于/about/link2或/about?link2的位置,同时保持相同的页面结构,但修改“链接内容”部分(在链接菜单的右侧)以显示特定链接的内容?如果有人能给我指出正确的方向,我将不胜感激,因为我根本不知道该往哪里走 此处假设没有发布代码
users
的表,还有一个名为users
的模型(默认情况下,Laravel 5附带了users模型,请参见app/users.php
)。用户将是我们链接数据的基础
首先,您希望注册一条路由,以便访问该页面以查看一些信息。您可以在routes文件中执行此操作。路由文件可以在这里找到:app/Http/routes.php
要注册路由,请添加以下代码:
Route::get('users', ['uses' => 'UserController@index']);
现在,只要我们点击URLhttp://your-app-name/public/users
(URL可能会有所不同,具体取决于您的应用程序的设置方式,即您可能不必在我们的web浏览器中包含public
),它将通过在UserController
上运行index
方法进行响应
要响应该路线,您可以将UserController
设置为:
<?php namespace App\Http\Controllers;
class UserController extends Controller {
public function index()
{
}
}
这将从数据库中获取用户,并加载一个传递用户数据的视图
以下是您的视图的外观:
<!DOCTYPE html>
<html>
<head>
<title>Users Page</title>
</head>
<body>
@foreach($users as $user)
<a href="{{ URL::route('user', ['id' => $user->id]) }}">
{{ $user->username }}
</a>
@endforeach
</body>
</html>
然后将show
方法添加到UserController
public function show($id)
{
// this will dump out the user information
return \App\User::find($id);
}
希望对你有点帮助!大部分内容都是在我的脑子里写的,所以如果您有任何错误,请通过评论告诉我。这个问题非常简单,如果您不显示任何代码,就很难真正帮助您解决问题。为了给你指出正确的方向,这里是你需要的 一个叫做“人”的模型,这是您访问数据的方式 控制器。在此控制器中,您将执行以下操作
People::Find($person\u id)代码>
返回视图(“纵断面”)->带有('person',$person)代码>
{{{$person->name}
对于需要显示指向用户的链接的页面,您的控制器中有一个方法,该方法
people::all()代码>
返回视图('all-people')->使用('people',$people)代码>
Route::get('get-person/{id}',
[ 'as' => 'get-person',
'uses' => 'PeopleController@getPerson' ]);
然后,您可以在视图中使用此路由来获取每个人的链接
@foreach($people as $person)
<a href="{{route('get-person', $person->id) }}">{{$person->name}}</a>
@endforeach
@foreach($people作为$person)
@endforeach
这将生成您想要的链接列表。有几种方法可以实现这一点 模板 创建您的路线。 我在这里对你的应用程序做了很多假设,但希望你能了解情况。如果您特别需要帮助,请确保使用您尝试过的代码更新您的问题,以便更容易帮助您
Route::get('about/{page}', function($page)
{
$profile = Profile::where('name', $page)->first();
return View::make('about')->with('profile', $profile);
});
修改Template.blade.php
将此行放在希望显示About.blade.php的位置
@yield('content')
创建将扩展模板的视图
@extends('Template')
@section('content')
<h2>User Profile</h2>
<ul>
<li>Name: {{ $profile->name }}</li>
<li>Last Updated: {{ $profile->updated_at }}</li>
</ul>
@stop
您可以随意使用与之前相同的模板结构,但这次我们需要在模板中添加一些javascript来处理AJAX。还需要标识需要动态设置的所有内容,以便使用jquery轻松设置
@extends('Template')
@section('content')
<h2>Links</h2>
@foreach($profiles as $profile)
<a href="#" onclick="setProfile(this);" data-id="{{ $profile->id }}">{{ $profile->name }}</a>
@endforeach
<h2>User Profile</h2>
<ul>
<li>Name: <span id="profile_name">{{ $profile->name }}</span></li>
<li>Last Updated: <span id="profile_updated_at">{{ $profile->updated_at }}</span></li>
</ul>
<script>
function setProfile(a)
{
$.ajax({
method: 'get',
url: 'getProfile',
dataType: 'json',
data: {
profile: $(a).data('id')
},
success: function(profile) {
$('#profile_name').html(profile.name);
$('#profile_updated_at').html(profile.updated_at);
},
error: function() {
alert('Error loading data.');
}
});
}
</script>
@stop
现在,该页面不必重新加载,只需更新个人资料信息。您能提供一些代码吗,可能是人们链接的数据来自何处,或者您迄今为止尝试过什么?非常感谢您的回答!有没有一种方法可以在不重新加载页面的情况下更新URL以显示每个相应的配置文件。您可以将其设置为
{{{$profile->name}}
,而不是将href
设置为{{{$profile->name}}
,它将每次更新它,但可能不完全是您想要的。
@extends('Template')
@section('content')
<h2>User Profile</h2>
<ul>
<li>Name: {{ $profile->name }}</li>
<li>Last Updated: {{ $profile->updated_at }}</li>
</ul>
@stop
Route::get('about', function($page)
{
$profiles = Profile::all();
return View::make('about')->with('profiles', $profiles);
});
@extends('Template')
@section('content')
<h2>Links</h2>
@foreach($profiles as $profile)
<a href="#" onclick="setProfile(this);" data-id="{{ $profile->id }}">{{ $profile->name }}</a>
@endforeach
<h2>User Profile</h2>
<ul>
<li>Name: <span id="profile_name">{{ $profile->name }}</span></li>
<li>Last Updated: <span id="profile_updated_at">{{ $profile->updated_at }}</span></li>
</ul>
<script>
function setProfile(a)
{
$.ajax({
method: 'get',
url: 'getProfile',
dataType: 'json',
data: {
profile: $(a).data('id')
},
success: function(profile) {
$('#profile_name').html(profile.name);
$('#profile_updated_at').html(profile.updated_at);
},
error: function() {
alert('Error loading data.');
}
});
}
</script>
@stop
Route::get('getProfile', function()
{
$profile_id = Input::get('profile');
$profile = Profile::find($profile_id);
return $profile->toJson();
});