视图中的Laravel子菜单

视图中的Laravel子菜单,laravel,model-view-controller,Laravel,Model View Controller,您好,我对Laravel和MVC框架一般来说都是新手,我希望创建一个链接列表(在模板中的视图中),链接到一些内容。我用它来显示九个人的列表,并在点击链接时显示他们的个人资料描述。我已经创建了一个页面外观模型。我关心的部分是蓝色的。有没有办法将这些链接发送到类似于/about/link2或/about?link2的位置,同时保持相同的页面结构,但修改“链接内容”部分(在链接菜单的右侧)以显示特定链接的内容?如果有人能给我指出正确的方向,我将不胜感激,因为我根本不知道该往哪里走 此处假设没有发布代码

您好,我对Laravel和MVC框架一般来说都是新手,我希望创建一个链接列表(在模板中的视图中),链接到一些内容。我用它来显示九个人的列表,并在点击链接时显示他们的个人资料描述。我已经创建了一个页面外观模型。我关心的部分是蓝色的。有没有办法将这些链接发送到类似于/about/link2或/about?link2的位置,同时保持相同的页面结构,但修改“链接内容”部分(在链接菜单的右侧)以显示特定链接的内容?如果有人能给我指出正确的方向,我将不胜感激,因为我根本不知道该往哪里走

此处假设没有发布代码,并假设您使用的是最新版本的Laravel,Laravel 5

假设数据库中有一个名为
users
的表,还有一个名为
users
的模型(默认情况下,Laravel 5附带了users模型,请参见
app/users.php
)。用户将是我们链接数据的基础

首先,您希望注册一条路由,以便访问该页面以查看一些信息。您可以在routes文件中执行此操作。路由文件可以在这里找到:
app/Http/routes.php

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

Route::get('users', ['uses' => 'UserController@index']);
现在,只要我们点击URL
http://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);
}

希望对你有点帮助!大部分内容都是在我的脑子里写的,所以如果您有任何错误,请通过评论告诉我。

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

一个叫做“人”的模型,这是您访问数据的方式

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

  • 从函数参数中获取所需配置文件的ID
  • 查找人员信息,例如
    People::Find($person\u id)
  • 返回带有该人员数据的纵断面图,例如
    返回视图(“纵断面”)->带有('person',$person)
  • 在您的视图中,您可以使用该页面上的数据,例如
    {{{$person->name}

    对于需要显示指向用户的链接的页面,您的控制器中有一个方法,该方法

  • 获取所有人员数据,例如
    people::all()
  • 使用该数据返回视图
    返回视图('all-people')->使用('people',$people)
  • 然后,您将需要一条路径来访问个人。路由需要将人员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
    
    @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();
    });