视图内的Laravel子菜单



嗨,我是Laravel和MVC框架的新手,我希望创建一个链接列表(在模板内的视图中)链接到一些内容。我用这个来显示9人的列表,并显示他们的个人资料说明时,点击链接。我已经在https://i.stack.imgur.com/qPmqn.png上创建了一个页面的模型。我所关心的部分用蓝色表示。有没有办法将这些链接路由到/about/link2或/about?Link2同时保持相同的页面结构,但修改"链接内容"部分(在链接菜单的右侧),以显示特定的链接的内容?如果有人能给我指出正确的方向,我会非常感激,因为我真的不知道该怎么做!

有几种方法可以做到这一点。

模板创建你的路线。

我在这里假设了很多关于你的应用程序,但希望你能得到图片。如果你需要任何特别的帮助,一定要用你尝试过的代码更新你的问题,这样会更容易帮助你。

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
AJAX

此解决方案将利用AJAX从服务器获取数据并将其输出到页面上。

初始页面视图的路由
Route::get('about', function($page)
{
    $profiles = Profile::all();
    return View::make('about')->with('profiles', $profiles);
});

可以随意遵循与之前相同的模板结构,但这一次我们需要在模板中添加一些javascript来处理AJAX。我们还需要id所有需要动态设置的东西,这样我们就可以很容易地用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
路由来处理AJAX请求
Route::get('getProfile', function()
{
    $profile_id = Input::get('profile');
    $profile = Profile::find($profile_id);
    return $profile->toJson();
});

现在,页面不需要重新加载,只需要更新配置文件信息。

假设这里没有发布代码,并且假设您使用的是最新版本的Laravel, Laravel 5.

假设你在数据库中有一个名为users的表,你有一个名为Users的模型(Laravel 5自带Users模型作为默认值,参见app/Users.php)。用户将是我们链接数据的基础。

首先,您想要注册一个路由,以便您可以访问该页面以查看一些信息。你可以在routes文件中这样做。路由文件可以在这里找到:app/Http/routes.php .

要注册路由,添加以下代码:

Route::get('users', ['uses' => 'UserController@index']);

现在这条路由的作用是,每当我们在web浏览器中点击URL http://your-app-name/public/users (URL可能会有所不同,这取决于你如何设置应用程序,即你可能不必包括public),它将通过在UserController上运行index方法来响应。

为了响应这个路由,你可以这样设置你的UserController:

<?php namespace AppHttpControllers;
class UserController extends Controller {
    public function index()
    {
    }
}

控制器应存放在app/Http/Controllers/中。

现在让我们充实index方法:

public function index()
{
    // grab our users
    $users = AppUsers::all();
    // return a view with the users data
    return view('users.index')->with('users');
}

从数据库中获取用户,并加载一个传递用户数据的视图。

你的视图应该是这样的:

<!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>

视图代码将从我们传递给视图的$users数据循环遍历每个用户,并创建一个指向他们的用户页面的链接,该链接基于每个用户的id(他们在DB中的唯一标识符)

由于我命名它的方式,这将在app/views/users/index.blade.php中找到-如果你保存以blade.php结尾的文件,你可以使用Laravel的模板语言,blade.

现在您需要最后设置另一条路由来响应用户页面,例如http://your-app-name/public/user/22

Route::get('user/{id}', ['uses' => 'UserController@show']);

然后将show方法添加到UserController

public function show($id)
{
    // this will dump out the user information
    return AppUser::find($id);
}

希望这对你有帮助!大部分都是我即兴写的,所以如果你有任何错误,请通过评论告诉我。

这个问题非常简单,如果不显示任何代码,很难真正帮助您的情况。只是为了给你指出正确的方向,这里是你需要的。

一个叫做人的模型,这是你访问你的数据的方式。

一个控制器。在此控制器中,您将执行以下操作

  1. 从函数参数中获取所需配置文件的ID
  2. 查找人员信息,例如People::find($person_id);
  3. 返回包含该人员数据的概要视图,例如return view('profile')->with('person', $person);

在您的视图中,您可以在该页上使用该数据,例如{{ $person->name }}

对于需要显示人员链接的页面,您将在控制器中使用一个方法…

  1. 获取所有人员数据,例如People::all();
  2. return view('all-people')->with('people', $people); 返回一个包含数据的视图

然后,您将需要访问单个人员的路由。路由需要将person ID传递到控制器方法中,例如

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

这将产生您想要的链接列表。

最新更新