ThinkPHP5.0.11Day07:view创建,传数据给view,遍历传来的数组,相关配置

目录

0x00视图创建:

0x01如何传数据给view

0x02 如何遍历传来的数组

0x04 相关配置


0x00视图创建:

文件分布:Index模块下有个controller目录,model目录,view目录,controller目录下有个IndexController.php控制器。

view目录下需要创建一个index_controller目录来与IndexController.php对应,对应规则为字母全部变成小写,如果是驼峰法命名,驼峰之前用下划线隔开。

index_controller目录下需要创建一个index.html 来与indexController.php控制器中的index方法对应。

在indexController.php中用fetch()方法可以将请求转到index.html

<?php
namespace app\index\controller;
use think\Controller;
use think\Db;

class IndexController extends Controller
{
  public function index(){
    // 将请求转到对应view中index.html
    return $this->fetch();

  }
}

如果index_controller下还有一个list.html,只要fetch('list')如果不加参数的话,默认转到方法名所对应的html文件

如果user_controller下还有一个index.html,要想转到该文件:

    return $this->fetch('user_controller/index');

如果想跨模块访问呢?即admin模块下view/login_controller/index.html

    return $this->fetch('admin@login_controller/index');

@之前是模块名,之后是view文件下的目录名和文件名

还可以将$this->fetch()替换成助手函数view();

以上便是模板渲染的两个函数

0x01如何传数据给view

如何传数据给view?

index/controller/IndexController.php

将数据封装成关联数组,然后传给fetch或者view的第二个参数

<?php
namespace app\index\controller;
use think\Controller;
use think\Db;

class IndexController extends Controller
{
  public function index(){
    // 假设这些数据是Model从数据库读出来的
    $data = ['name'=>'liudehua','age'=>23];
    return $this->fetch('index',$data);
  }
}

index/view/index.html如何接受参数?{$数组中的键名}

<div>name: <span>{$name}</span></div>
<div>age: <span>{$age}</span></div>

方法二:不方便

  public function index(){
    $this->assign('name','liudehua');
    $this->assign('age',33);
    return $this->fetch();
  }

实际应用场景:

以数组的方式发给前端

  $data = ['name'=>'liudehua','age'=>23];
    $this->assign('userInfo',$data);
    return $this->fetch();
<div>name: <span>{$userInfo['name']}</span></div>
<div>age: <span>{$userInfo['age']}</span></div>

用$userInfo.name也可以,如果$userInfo是一个对象,那么就$userInfo->name

const是tp5在base.php中定义的常量的输出.const可以省略

config可以获取config.php中定义的值

server可以输出$_SERVER中的值

session可以输出$_SESSION中的值

如果想在变量输出时用系统函数做一些处理呢?

cookie可以输出$COOKIE中的值

可以在常量名后面加一个 |函数名

例如:

<div>name: <span>{$userInfo['username']|strtoupper}</span></div>
<div>name: <span>{$userInfo['username']|strtoupper|md5}</span></div>

而像时间戳转日期date(‘Y-m-d H:i:s’,时间戳)这种需要传两个参数的函数,则需要用以下格式,其中###是占位符,前面的变量$userInfo['reg_time']将替换他

<div>reg_time: <span>{$userInfo['reg_time']|date='Y-m-d H:i:s',###}</span></div>

如果一个函数变量在前面呢?

例如:substr(字符串变量,开始,截多少个),记住一个原则:将变量的位置用###占位,且如果###在第一位可以省略

<div>{$Think.server.SCRIPT_FILENAME|substr=###,0,10}</div>

这里要特别注意安全性问题,特别是防xss注入。

我们对$_POST/$_GET + echo = xss 很敏感,这里{$}其实就相当于echo,如果用户可以控制变量的值,而开发将接收到的变量直接输出的话 = xss;

建议凡是接受传参的变量,在输出前均用htmlspecialchars过滤,或者直接用strip_tags直接将标签截掉

如果一个变量没有传过来,可以设置一个默认值,即在变量之后加上|default="xxxxx"

如果想在html页面中用原生php代码,可以这样写{:原生php}例如{:substr($user[time],0,5)}等价于{$user[time]|substr=###,0,5}

0x02 如何遍历传来的数组

1.volist标签 相当于原生的foreach( 数组 as [键=>]键值){}

写法:

{volist name=数组名,id=键值[,key=键,offset=从第几个开始,length=循环多少次]}

中间可以写任何东西

{/volist}

例如:

<h1>this is view index.html </h1>
{volist name="userInfo" id="value"}
<div>{$value['username']}=={$value['pwd']}</div>
{/volist}

volist中内置了一个迭代计数变量{$i},如果想知道打印的是第多少条数据,可以输出{$i}

如果想输出键,可以加上,key=键,其实i是key的默认值,如果设置了key就不可以用i了

2.tp5封装的foreach标签

{foreach 数组名 as 键=>键值}

{/foreach}

{foreach $userInfo as $value}
<div>{$value['username']}=={$value['pwd']}</div>
{/foreach}

看需求吧,volist功能更强大一些

3.for标签

{for start='0' end='5' name='i' step='2'}
<div>{$i}</div>
{/for}

4.if标签

{volist name="userInfo" id="v"}
{if($v.id>20)}
{$v.username}<br/>
{elseif($v.id == 9)}
{$v.pwd}<br/>
{else}
{$v.reg_time}<br/>
{/if}
{/volist}

5.switch标签,break默认添加

{volist name="userInfo" id="v"}
    {switch name="$v.username"}
        {case value="liyuan3"}
            {$v.pwd}
        {/case}
        {default/}
        this is default
    {/switch}
{/volist}

6.三元运算符

{$v.username=='hello7'?$v.username:'no'}

7.原生写法:

{php}
foreach($userInfo as $user){
    echo $user['username'];
}
{/php}

8.tp5.0.4之后添加了模板输出替换

指向public:__ROOT__<br>
指向public/static:__STATIC__ <br>
指向public/static/css:__CSS__<br>
指向public/static/js:__JS__<br>

以上输出的是相对路径,建议打开httpd.conf下的vhost,修改域名后使用以上方法导入css文件或者js文件,以及图片文件

0x04 相关配置

并且支持自定义的配置文件

application/config:

    // 视图输出字符串内容替换
    'view_replace_str'       => ['__IMG__'=>'/static/images'],

实例:

<link rel="stylesheet" href="__CSS__/style.css">

以上是相对路径,因为虽然配置了路由,但是现在访问的目录仍然是public/index.php,所以要访问同目录下的/static/css/style.css

原样输出:

{literal}
{$name}
{/literal}

{$name}便不会当做变量去解析,直接输出

运算:

注释:

 

在config.php中可以修改模板标记:

如果你修改了一些配置,但是却没有生效,需要清理一下缓存

所有用模板写的html文件都会在缓存中,转化成php文件。

标签库标签:即像{if xxxx}这种两边的标签属于标签库标签

修改view的位置:

我们现在是一个模块下面一个view,我们可以修改成在public下有一个view文件夹,里面有个对应各个模块的文件夹,

config.php中修改:

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值