這一篇,我們來學習更多關於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']
這裡表示,要傳遞兩個變數,分別是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
方法,效果是一樣的。
完結。