Ruby 程式設計師學習 Laravel 框架筆記 (8)-view 的更多知識

hfpp2012發表於2017-08-14

這一篇,我們來學習更多關於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 的更多知識

相關文章