【问题标题】:Laravel Sub-menu Within View视图中的 Laravel 子菜单
【发布时间】:2015-06-10 03:25:19
【问题描述】:

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

【问题讨论】:

  • 您能否包含一些代码,也许是人们链接的数据来自哪里,或者您到目前为止尝试过什么?

标签: laravel model-view-controller


【解决方案1】:

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

模板

创建您的路线。

我在这里对你的应用做了很多假设,但希望你能明白。如果您需要任何特别的帮助,请务必使用您尝试过的代码更新您的问题,以便更容易为您提供帮助。

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();
});

现在,页面不必重新加载,只需更新个人资料信息。

【讨论】:

  • 非常感谢您的回答!有没有办法在不重新加载页面的情况下更新 URL 以显示每个相应的配置文件?
  • 那种。您可以将其设置为#{{ $profile-&gt;name }},而不是将href 设置为#,它每次都会更新它,但可能不会完全符合您的要求。
【解决方案2】:

在这里做一些假设,因为没有发布代码,并假设您使用的是最新版本的 Laravel,Laravel 5。

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

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

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

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

现在这条路由的作用是每当我们在我们的网络浏览器中点击 URL http://your-app-name/public/users(URL 可能会有所不同,具体取决于您的应用设置方式,即您可能不必包含 public)在我们的网络浏览器中通过在UserController 上运行index 方法。

要响应该路线,您可以这样设置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(他们在数据库中的唯一标识符)而有所不同

由于我命名它的方式,它可以在 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);
}

希望能有所帮助!大部分都写在我的脑海里,所以如果你有任何错误,请通过评论告诉我。

【讨论】:

    【解决方案3】:

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

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

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

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

    在您看来,您可以在该页面上使用该数据,例如{{ $person-&gt;name }}

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

    1. 获取所有人员数据,例如People::all();
    2. 返回包含该数据的视图return view('all-people')-&gt;with('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
    

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

    【讨论】:

      猜你喜欢
      • 2019-01-22
      • 2019-12-06
      • 1970-01-01
      • 1970-01-01
      • 2020-12-03
      • 2019-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多