2016年10月5日 星期三

[Laravel 5 教程学习笔记] 四、向视图传送数据

上一篇学习了Laravel的路由、控制器及视图的使用,这一篇将学习如果向视图中传送数据。
在Routes.php中新建一个路由:
  1. Route::get('about', 'PagesController@about');
之后我们可以手动创建控制器,但是Laravel提供的artisan工具可以让我们更加方便的生成一个控制器。在Laravel安装目录下右键,选择“Use Composer Here”,之后运行:
  1. php artisan
注:artisan命令必须在项目的根目录(Laravel安装目录)下运行。
可以看到,artisan为我们提供了很多的功能,这里我们需要用到make:controller
  1. php artisan make:controller PagesController
这时,Laravel会在app/Http/Controllers目录下自动为我们创建一个PagesController.php,里面默认包含了index()create()store()show($id)edit($id)update($id)destroy($id)几个方法,我们这里并不需要所有的这些方法,所以我们可以生成一个更加简洁的控制器。删除刚才生成的PagesController.php,然后到命令行工具中运行:
  1. php artisan make:controller PagesController --plain
这次生成的controller中将不包含任何方法。
如果想知道我们命令行执行时可以带哪些参数,可以使用帮助功能,运行下面的命令:
  1. php artisan help make:controller
php-artisan-help
PagesController中创建about()方法:
  1. public function about() {
  2. return 'About Page';
  3. }
到浏览器中打开http://laravel.dev/about,可以看到输出了“About Page”。
现在,我们想返回一个视图,修改about()方法:
  1. public function about() {
  2. // return 'About Page';
  3. return view('pages.about');
  4. }
之后到resources/views/pages目录下创建about.blade.php文件,输入内容:
  1. lang="en">
  2. charset="UTF-8">
  3. </span><span class="pln" style="box-sizing: border-box; color: rgb(255, 255, 255);">Document</span><span class="tag" style="box-sizing: border-box; color: rgb(137, 189, 255);">
  • About me
  • 个人简介
  • 现在刷新浏览器看看效果吧。
    现在来向视图传送数据:
    修改about()方法:
    1. public function about() {
    2. $name = 'Specs';
    3. return view('pages.about')->with('name', $name);
    4. }
    然后修改对应个视图about.blade.php
    1. About me
  • I'm $name ?>
  • 再次刷新浏览器查看效果吧~
    因为我们使用的Laravel的blade模版,所以上面写法优化一下,可以修改为:
    1. About me
  • I'm {{ $name }}
  • 需要注意的是,blade模版{{ $var }}会转义html语义的,例如,我们把about()方法中$name变量修改为:$name = 'Specs';,刷新浏览器,发现浏览器直接输出的是I'm Specs,查看源代码发现原来$name变量中的字符已经被转义成了HTML实体。
    laravel-view-data-1
    如果不需要转义HTML的话,可以使用 {!! $var !!},修改视图文件为:I'm {!! $name !!},再次刷新浏览器查看结果:
    laravel-view-data-2
    另外,除了上述方法向视图传送数据,还有下面几种方式。
    1). 向视图传送数组
    修改about()方法:
    1. public function about() {
    2. return view('pages.about')->with(['first' => 'Foo', 'second' => 'Bar']);
    3. }
    在视图中调用:
    1. {{ $first }}, {{ $second }}
    2). 给view()指定第二个参数
    修改about()方法:
    1. public function about() {
    2. $data['first'] = 'Foo';
    3. $data['second'] = 'Bar';
    4. return view('pages.about', $data);
    5. }
    调用同上。
    这里还可以通过PHP的compact()方法来组织数据:
    1. public function about() {
    2. $first = 'Foo';
    3. $second = 'Bar';
    4. return view('pages.about', compact('first', 'second'));
    5. }
    调用方法也一样。
    如果你使用这种法来进行数据传参, $data 必须是 键/值 对应的数组数据,这样在视图里面,你可以使用对应的键来获取值, 如: {{ $key }} 会取得 $data["$key"] 对应的数据。


    from : http://9iphp.com/web/laravel/laravel-post-data-to-view.html

    沒有留言:

    wibiya widget