如何通过控制器呈现视图模板

时间:2017-06-14 05:11:56

标签: php laravel

我想为我的fastfat重复使用相同的return View::make('pages.home');模板视图,但我不确定如何将视图连接到该控制器。

我假设我需要在控制器UserController中放置一些东西,但我不确定这是我第一次使用Laravel。

这是我目前的代码:

index

Routes.php

<?php Route::get('/home', function () { return View::make('pages.home'); }); Route::get('/', 'UserController@index'); Route::get('user/{id}', 'UserController@show'); Route::get('/foo', function () { return 'taobao'; });

UserController.php //simplified

5 个答案:

答案 0 :(得分:1)

你可以试试这个

public function index()
{
  $this->oauth();
  $user = ['name' => 'James'];
  return view('user', compact('user'));
}

现在您可以在用户视图中拨打$user了。 示例(使用刀片):{{ $user['name'] }},输出为James

答案 1 :(得分:1)

您不需要将视图连接到Laravel中的控制器。您只需将视图放在特定位置(默认或预期)。

创建视图并存储在视图目录中后,您可以在任何控制器内调用它。 MVC中的视图和控制器之间没有严格的连接。

您只需要从所需的任何控制器操作返回return View::make('pages.home');,并多次重复使用它。或者,您可以使用帮助器return view('pages.home');

希望这就是你所寻求的。

答案 2 :(得分:1)

您无需在Controller的index()方法中添加任何特定内容。将控制器看作是掌控的大脑......“控制”将会发生什么,要么对数据库进行长时间查询,要么计算某些操作,返回视图,要么将所有操作组合起来。

在上面的代码中Route::get('/', 'UserController@index');实际上绑定了/“地址”或路由到index()的方法UserController

关于您提出的问题,您需要拆分pages.home视图,以便可以重复使用。我建议您阅读templates文档。

简而言之,您可以拥有以下页面,名为base.blade.php

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Page</title>

    <!-- Bootstrap includes -->
    <!-- JS Includes -->
</head>
<body>
    <nav>
        <ul>
            <li><a href="#">Link 1</a></li>
            <li><a href="#">Link 2</a></li>
        </ul>
    </nav>

    <div class="content">
        @yield('content')
    </div>
</body>
</html>

然后,我们可以再创建2个页面。

users.blade.php

@extends('layouts.base')

@section('content')

    <div> Hello Users!</div>    

@endsection

admins.blade.php

@extends('layouts.base')

@section('content')

    <div> Hello Admins!</div>    

@endsection

这两个刀片模板会在其对应的部分(在本例中为内容)中将HTML注入模板base.blade.php。这样,您可以“重用”视图,这非常有效,因为更改base.blade.php将更改“注入”或从其继承的所有视图。

现在,就像你说的那样,为了将视图“连接”到控制器,你只需要从该控制器的方法中返回一个视图。例如:

MyController.php

MyController extends Controller{

    ...

    public function index()
    {
        // Fancy stuff you might wanna do...

        // Note this will pull the view from within the layout folder
        return view('users');
    }

}

当然,你需要有一个与那个Controller和那个方法配对的路由,在这种情况下你可以这样做。

我希望这有帮助!

干杯!

答案 3 :(得分:1)

如果您需要在UserController中重复使用相同的return View::make('pages.home');或主视图,可以将其称为

return view('home', ['name' => 'James']);

或者您需要在用户视图中包含主视图,然后才能执行

@extends('home') or @include('home')

答案 4 :(得分:1)

我想你应该试试这个:

user.blade.php

中添加以下行
@include('pages.home')