博客列表 >控制器的创建及其传参方式、视图引擎blade判断语句

控制器的创建及其传参方式、视图引擎blade判断语句

longlong
longlong原创
2020年09月15日 10:06:54958浏览

一、控制器创建

1. 自动创建

使用 php artisan make:controller Index 命令就可以自动生成一个 Index.php控制器


并且控制器已经被写好了类和命名空间:


下一步,给控制器写上一个方法,然后使用路由绑定这个控制器中的方法,实现一个映射:

index.php

  1. <?php
  2. namespace App\Http\Controllers;
  3. use Illuminate\Http\Request;
  4. class Index extends Controller
  5. {
  6. public function index(){
  7. return 'index页面';
  8. }
  9. }

web.php

  1. <?php
  2. use Illuminate\Support\Facades\Route;
  3. Route::get('/', function () {
  4. return view('welcome');
  5. });
  6. Route::get('index','Index@index');

访问页面时,如下:


2. 手动创建

Controllers目录下,直接新建文件,比如:Show.php,创建好以后是一个空白文件,需要自己补上命名空间以及类的继承

命名空间和文件目录对应,如:namespace App\Http\Controllers

类名和文件名对应,并且要继承基类,如:class Show extends Controllers

都创建好以后在类中再写一个方法用于测试,如下:

Show.php

  1. <?php
  2. namespace App\Http\Controllers;
  3. class Show extends Controller
  4. {
  5. public function test(){
  6. return '这是手动创建的控制器';
  7. }
  8. }

web.php

  1. Route::get('index/test','Show@test');

访问页面如下:


3. 控制器往视图传值

  • 当参数不多时,可以在view()函数中直接传值,以数组的方式,如下:

User.php:(控制器)

  1. <?php
  2. namespace App\Http\Controllers;
  3. use Illuminate\Http\Request;
  4. class User extends Controller
  5. {
  6. public function info(){
  7. $username = 'alice';
  8. return view('user',['username'=>$username]);
  9. }
  10. }

web.php:(路由)

  1. Route::get('index/user','User@info');

user.blade.php

  1. <!doctype html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport"
  6. content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
  7. <meta http-equiv="X-UA-Compatible" content="ie=edge">
  8. <title>Document</title>
  9. </head>
  10. <body>
  11. <div>用户名:{{$username}}</div>
  12. </body>
  13. </html>

访问页面如下:


  • 当参数较多时,可以先创建一个数组来接收这些参数,然后将创建的数组放在view()方法中当做参数使用
  1. class User extends Controller
  2. {
  3. public function info(){
  4. $data['name'] = 'jack';
  5. $data['hobby'] = 'ball';
  6. $data['age'] = 20;
  7. $data['sex'] = 'male';
  8. $data['score'] = 'very good';
  9. return view('user',$data);
  10. }
  11. }
  1. <body>
  2. <div>姓名:{{$name}}</div>
  3. <div>爱好:{{$hobby}}</div>
  4. <div>年龄:{{$age}}</div>
  5. <div>性别:{{$sex}}</div>
  6. <div>成绩:{{$score}}</div>
  7. </body>


这里看到 {{}} 这样的双括号语法,其实这是blade翻译模板引擎的语法,使用了{{}}以后,Laravel框架会自动将变量显示出来,就类似于:

  1. <div>姓名:<?php echo $name;?></div>

而在blade翻译模板中,翻译以后多了一个e()函数:(翻译文件在storge->framework->views中查找)

  1. <div>爱好:<?php echo e($hobby); ?></div>

使用此函数的原因是,Laravel框架为了保证代码的相对安全性,因为当你使用HTML标签时,e()方法会原样输出,如下:


如果不使用{{}}语法,使用原生的<? echo ...;?>语法,可能会造成安全漏洞,比如:(当加入script标签时)

  1. $data['score'] = '<script>window.location.href="http://www.baidu.com";</script>';

当你进入网页时,页面会自动跳转到其他网站,这是非常危险的,所有都要尽量使用{{}}这种语法


不过有时候在确保相对安全的情况下,很想使用HTML标签,比如给字体做点样式,那么这时候可以使用{!! 变量 !!}来禁用Lavarel的e()方法,禁止转义翻译,如下:

  1. $data['sex'] = '<span style="color: red;font-size: 1.5rem">male</span>';
  1. <div>性别:{!! $sex !!}</div>


二、视图中的blade语法

1. if…else…

控制器:

  1. <?php
  2. namespace App\Http\Controllers;
  3. use Illuminate\Http\Request;
  4. class Index extends Controller
  5. {
  6. public function login(){
  7. $username = 'lisa';
  8. // $username = false;
  9. return view('login',['username'=>$username]);
  10. }
  11. }

路由:

  1. Route::get('login','Index@login');

视图:

  1. <!doctype html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport"
  6. content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
  7. <meta http-equiv="X-UA-Compatible" content="ie=edge">
  8. <title>Document</title>
  9. </head>
  10. <body>
  11. @if($username)
  12. <div>进入主页了,欢迎您,{{$username}}</div>
  13. @else
  14. <div>请您先登录</div>
  15. @endif
  16. </body>
  17. </html>

$username='lisa'时,访问页面如下:


$username=false时,访问页面如下:


2. switch

控制器:

  1. public function info(){
  2. $score = 50;
  3. return view('user',['score'=>$score]);
  4. }
  5. }

路由:

  1. Route::get('index/user','User@info');

视图:

  1. <!doctype html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport"
  6. content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
  7. <meta http-equiv="X-UA-Compatible" content="ie=edge">
  8. <title>Document</title>
  9. </head>
  10. <body>
  11. <h3>学生成绩</h3>
  12. @switch(true)
  13. @case($score>=90 && $score<100)
  14. <p>成绩={{$score}}分,优秀!</p>
  15. @break
  16. @case($score>=70 && $score<90)
  17. <p>成绩={{$score}}分,良好!</p>
  18. @break
  19. @case($score>=60 && $score<70)
  20. <p>成绩={{$score}}分,刚好及格!</p>
  21. @break
  22. @default
  23. <p>成绩={{$score}}分,准备补考!</p>
  24. @endswitch
  25. </body>
  26. </html>

$score=50时,页面输出如下:


$score=88时,页面输出如下:

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议