# 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)
- 0. 介绍
- 1. php 开发环境安装
- 2. 跑 laravel 的 hello world
- 3. 第一个路由 UsersController
- 4. 在数据库中创建一条数据
- 5. 简单的用户认证
- 6. 修改 User model
- 7. User model 的 getter 方法
- 8. view 的更多知识
- 9. 在 view 中共享变量
- 10. blade layout
- 11. 使用 @include 来整理 view
- 12. Blade if/else/unless/or
- 13. factories, faker and seeding
- 14. Blade foreach
- 15. 分页
- 16. 用中间件来限制用户必须登录
- 17. Route group
- 18. CURD 实践之改变用户表结构
- 19. CURD 实践之为新添加的属性修改注册功能
- 20. CURD 实践之用 username 来代替 email 登录
- 21. CURD 个人中心页面
- VIM 的 laravel 插件
- VIM 中有效地查看 php 源码