# 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](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>
```
頁面輸出如下:

這里有必要提一下 `{{ }}`和`{!! !!}` 的區別,正如上面的效果所顯示的,`{{ }}` 是會原樣輸出一些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 源碼