Ruby 程序员学习 Laravel 框架笔记 (8)-view 的更多知识

这一篇,我们来学习更多关于view的知识。

1. 判断view是否存在

为了方便演示,我们来新建一个全新的controller。

在终端上运行如下命令:

$ php artisan make:controller PagesController

有了controller,我们先把路由加一下:

// routes/web.php

<? php

Route::get('/', 'PagesController@index');

我们把网站的首页指向了这个新创建的PagesController。

接着来到controller文件这里,改一下,如下所示:

// app/Http/Controllers/PagesController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

// 这行是新增的
use View;

class PagesController extends Controller
{
    public function index()
    {
        // 这个可以判断相应的view是不是存在的
        if (View::exists('pages.index'))
            return view('pages.index');
        else
            return 'No view available';
    }
}

现在访问一下,如下图所示:

因为我们这个时候还没创建pages.index这个view文件。

resources/views下新建一个目录,叫pages,然后在该pages目录下再新建一个文件:index.blade.php

resources/views/index.blade.php文件的内容如下:

Hello, from index in pages folder.

然后再刷新一下浏览器,效果如下:

2. 向 view 传递数据

在第三篇文章Ruby 程序员学习 laravel 框架笔记 (3)-第一个路由 UsersController就有说过向view传递数据的知识点,其中的相关代码是这样的:

// app/Http/Controllers/UsersController.php

<?php

...

class UsersController extends Controller
{
    public function index()
    {
        $users = [
            '0' => [
                'first_name' => 'Renato',
                'last_name' => 'Hysa'
            ],
            '1' => [
                'first_name' => 'Jessica',
                'last_name' => 'Alba'
            ]
        ];

        // 这行变了,表示 $users 这个变量会传递到view中
        return view('admin.users.index', compact('users'));
    }
}

主要是那个compact方法,在上面的代码中,它表示能将$users这个变量传递到admin.users.index这个view中,以后在admin.users.index这个view就可以直接使用这个变量的数据。

现在我们换一个方法来实现向view传递变量,而不用compact这个函数。

改一下PagesController的内容,如下所示:

// app/Http/Controllers/PagesController.php

<?php

...

class PagesController extends Controller
{
    public function index()
    {
        if (View::exists('pages.index'))
            return view('pages.index', ['text' => '<b>Laravel</b>', 'name' => 'Nicole']);
        else
            return 'No view available';
    }
}

看上面的代码,还是用了view函数,不过不用compact函数了,['text' => '<b>Laravel</b>', 'name' => 'Nicole']这里表示,要传递两个变量,分别是textname

我们把这两个变量放到view中。

Hello, from index in pages folder.

<p>{!! $text !!}</p>

<p>{{ $text }}</p>

<p>{{ $name }}</p>

页面输出如下:

这里有必要提一下{{ }}{!! !!}的区别,正如上面的效果所显示的,{{ }}是会原样输出一些html标签,也就是会跳脱html标签,而这样能避免一些xss攻击,比较安全,而{!! !!}不会,但是有时候又必须用到{!! !!},比如你要输出一些带格式的html标签,特别是那种富文本框的情况。

3. 另一种向 view 传递数据的方法

最后再介绍另一种向 view 传递数据的方法。

把PagesController改一下:

// app/Http/Controllers/PagesController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use View;

class PagesController extends Controller
{
    public function index()
    {
        if (View::exists('pages.index'))
            return view('pages.index')
                ->with('text', '<b>Laravel</b>')
                ->with('name', 'Nicole');
            # return view('pages.index', ['text' => '<b>Laravel</b>', 'name' => 'Nicole']);
        else
            return 'No view available';
    }
}

看上面的代码,用了view方法,也用了with方法,效果是一样的。

完结。

下一篇:Ruby 程序员学习 laravel 框架笔记 (8)-view 的更多知识

本作品采用《CC 协议》,转载必须注明作者和本文链接
咱们的学习圣地是: https://www.qiuzhi99.com,这里有不限于 Nodejs、React、TypeScript、GraphQL 相关的精品课程。
本帖由 Summer 于 6年前 加精
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 6

为什么需要判断view是否存在呢?这样不是多此一举嘛?本地开发,那view文件必定存在啊,没看懂。。

6年前 评论

@839891627 这个确实没啥必要,只是为了学习View::exists这个方法,或别的啥,只是为了学习知识啦,现实中也好像没必要 :smile:

6年前 评论
bestony

@839891627 有用,比如特别的目录页面。可以创建一个文件夹,来存放不同的ID.blade.php,判断是否存在对应的文件,如果存在,则选择特别的页面,不存在则选择默认的。你可以认为是 view 的 plugin。

6年前 评论

@bestony 谢谢分享,学习到了

6年前 评论

习惯用 compact ,with 麻烦

6年前 评论

@mingyun 哦,compact是比较简单

6年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!