# 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'; } } ``` 现在访问一下,如下图所示: ![](https://box.kancloud.cn/1eaa9ed6d46d2f8613d79a30cdbbb641_926x312.png) 因为我们这个时候还没创建 `pages.index` 这个 view 文件。 在 `resources/views` 下新建一个目录,叫 `pages`,然后在该 `pages` 目录下再新建一个文件:`index.blade.php`。 `resources/views/index.blade.php` 文件的内容如下: ``` Hello, from index in pages folder. ``` 然后再刷新一下浏览器,效果如下: ![](https://box.kancloud.cn/b2362914d8b969d3c9117e21cb74c65b_812x274.png) ## 2. 向 view 传递数据 在第三篇文章 [Ruby 程序员学习 laravel 框架笔记 (3)-第一个路由 UsersController](https://www.rails365.net/articles/ruby-cheng-xu-yuan-xue-xi-laravel-kuang-jia-bi-ji-3-di-yi-ge-lu-you-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']` 这里表示,要传递两个变量,分别是 `text` 和 `name`。 我们把这两个变量放到 view 中。 ``` Hello, from index in pages folder. <p>{!! $text !!}</p> <p>{{ $text }}</p> <p>{{ $name }}</p> ``` 页面输出如下: ![](https://box.kancloud.cn/72c75a61efff24ea8b265c8fb709140b_856x428.png) 这里有必要提一下 `{{ }}`和`{!! !!}` 的区别,正如上面的效果所显示的,`{{ }}` 是会原样输出一些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 的更多知识](https://www.rails365.net/articles/ruby-cheng-xu-yuan-xue-xi-laravel-kuang-jia-bi-ji-8-view-geng-duo-zhi-shi)