视图内的Laravel子菜单

时间:2015-06-09 16:37:38

标签: laravel model-view-controller

您好我对Laravel和MVC框架一般都是新手,我希望创建链接到某些内容的链接列表(在模板中的视图中)。我使用它来显示九个人的列表,并在点击链接时显示他们的个人资料描述。我在http://i.imgur.com/8XhI2Ba.png创建了一个页面样子的模型。我关注的部分是蓝色的。有没有办法将这些链接路由到/ about / link2或/ about?link2,同时保持相同的页面结构,但修改“链接内容”部分(在链接菜单的右侧)以显示特定链接的内容?如果有人能指出我正确的方向,我会非常感激,因为我几乎不知道该去哪里!

3 个答案:

答案 0 :(得分:0)

在此处做出一些假设,因为没有发布任何代码,并假设您使用的是最新版本的Laravel,Laravel 5.

假设您的数据库中有一个名为users的表,并且您有一个名为Users的模型(Laravel 5默认带有Users模型,请参阅app/Users.php)。用户将成为我们链接数据的基础。

首先,您要注册路线,以便访问该页面以查看某些信息。您可以在routes文件中执行此操作。路线文件可在此处找到:app/Http/routes.php

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

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

现在,当我们点击网址http://your-app-name/public/users时,此路由的作用是什么(网址可能会有所不同,具体取决于您的应用设置方式,即您可能不必在我们的网络中添加public)浏览器将通过在index上运行UserController方法进行响应。

要回复该路线,您可以将UserController设置为:

<?php namespace App\Http\Controllers;

class UserController extends Controller {

    public function index()
    {

    }

}

控制器应存储在app/Http/Controllers/

现在让我们充实index方法:

public function index()
{
    // grab our users
    $users = App\Users::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的模板语言,刀片。

现在您需要最终设置另一条路线来响应用户页面,例如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 \App\User::find($id);
}
希望有所帮助!写下我的大部分内容,请通过评论告诉我是否有任何错误。

答案 1 :(得分:0)

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

一个名为People的模型,这就是您访问数据的方式。

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

  1. 从函数参数中获取所需的配置文件的ID
  2. 查找人员信息,例如People::find($person_id);
  3. 返回包含该人员数据的个人资料视图,例如return view('profile')->with('person', $person);
  4. 在您的视图中,您可以在该页面上使用该数据,例如{{ $person->name }}

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

    1. 获取所有人数据,例如People::all();
    2. 返回包含该数据的视图return view('all-people')->with('people', $people);
    3. 然后,您将需要一条路线来访问某个人。该路由需要将人员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
      

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

答案 2 :(得分:0)

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

模板

创建您的路线。

我在这里假设你的应用程序很多,但希望你能得到它。如果您需要特别帮助,请务必使用您尝试的代码更新您的问题,以便更方便地为您提供帮助。

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。还需要识别需要动态设置的所有内容,以便我们可以使用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();
});

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