看过前面文章的朋友们都对视图、路由、控制器有了一定的认识。
现在我们来了解一下向view视图传递数据的方法。
我们先在view下建立一个子目录,view目录在哪里就不用多说了吧。
cd resources/views/
mkdir books
然后我们把welcome.blade.php复制到books目录下名为index.blade.php。
cd ../
cp welcome.blade.php books/index.blade.php
好的,准备工作有了,我们打开路由文件web.php
把原本根目录的路由注释掉,添加新的根目录路由做测试用:
Route::get('/',function(){
return view('books.index');
});
也可以:
Route::get('/',function(){
return view('books/index');
});
这是个小知识点,关于view下面的子目录子视图文件的索引方式可以是'.',也可以是'/',这个看个人习惯。
我们把这个index.blade.php的第82行改成:Book Index Page
现在我们用Chrome打开测试链接testdemo.test
OK,很成功,现在我们向视图传递数据;
我们把这个index.blade.php的第82行改成:Book Index Page { {$website}}
然后我们把上面所说的路由视图用with的方法传递参数:
Route::get('/',function(){
return view('books.index')->with('website','gamacode.com');
});
with语句解析:
with('变量名','变量值')
现在我们再刷新测试链接可以看到:
参数值被传递进来了.
在视图文件里面传递参数的语句是花括号里面放一个变量名{ {$变量名}}
当然可以继续传递,比如路由语句写成:
Route::get('/',function(){
return view('books.index')->with('website','gamacode.com')->with('name','www');
});
然后把视图文件index.blade.php的第82行写成
Book Index Page { {$name}}.
{ {$website}}
然后刷新测试链接,我们可以看到:
以上用的是with链式调用方法。
但是如果数据很多呢?那这种方法岂不是要写很多with,其实用一个with传递数组就行,我们修改web.php中的view函数,写成:
Route::get('/',function (){
return view('books.index')->with([
'website' => 'gamacode.com',
'name' => 'www'
]);
});
也可以不用with方法:
Route::get('/',function(){
return view('books.index',[
'website' => 'gamacode.com',
'name' => 'www'
]);
});
以上两种方法刷新测试页面,依旧可以看到如下页面
其实我们也可以把index.blade.php文件的第82行写成
Book Index Page {
{$name.'.'.$website}}
效果也是一样的,我们可以看出view函数的写法:
view('blade.php视图文件',[数组])
数组写法:
[
'变量名' => '值',
'变量名' => '值'
...
]
当然这里的数组里面的变量名也可以是新的数组,比如:
Route::get('/',function(){
return view('books.index',[
'website' => 'gamacode.com',
'name' => 'www',
'new' => [
//数组
]
]);
});
不过我们还有一种方法:
Route::get('/',function(){
$website = 'gamacode.com';
$name = 'www';
return view('books.index',compact('website','name'));
});
这样的方法是把数据提到外面,然后用compact函数作为view函数的第二个值,compact是PHP的内置函数,是一个把数据转换为数组格式的函数。这种写法多了一个转换过程,compact牺牲了一点运行效率,提升了代码的组织质量。如果不想牺牲运行效率可以直接用[]数组的方法写。
系列文章:
网站PHP框架之Laravel系列文章