Blogger Information
Blog 60
fans 5
comment 3
visits 65252
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
控制器的创建及其传参方式、视图引擎blade判断语句
longlong
Original
964 people have browsed it

一、控制器创建

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时,页面输出如下:

Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:尽可能使用命令行来创建控制器, 模型等
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post