tp会在 每个网页/action 生成页面 的时候, 有一个执行过程, 加载过程:
入口文件-> ...., -> 加载配置文件, .... -> 加载控制器 -> 加载action
所以, 在任意一个 action的页面内容 显示之前 都会加载 配置文件中的内容, (是加载! ) 通常来说, 配置文件 是php的return数组语句, 所以是不会输出具体内容的
但是, 如果你的 用户配置/扩展配置文件中, 比如 bala.php为了调试写入内容的时候, 你没有写 <?php return array(....
而是随便写入什么内容的时候, 比如 "abc", 那么这个bala.php在加载的时候, 就会把它的内容 abc, 输出到后面的action页面中 , 所以,你会觉得很奇怪的是, 这个abc 哪里来的? action中没有写任何内容啊? 原来就是从 这个 非正常的 配置文件中来的, 输出来的/加载来的.
当然如果你在配置文件中 , 写了 <?php....
那么在此 标签之后的内容, 或者是任意写的内容不会被输出, 或者会报错; 但是 此 ?php标签之前写的内容 回被输出, 甚至如果是 有html标签的color等都会按html的内容格式输出!
正是因为 配置文件在加载的时候, php标签会被浏览器所解析, 其中的内容 (如果有输出, 像echo, print_r, var_export之类的), 会被输出到浏览器中,所以, 配置文件中的语句, 都应该是 return array(....); 把配置项写在 array里面, 这样就不会有 输出了
配置文件的格式要求, 通常是
php标签顶格写, "return array( "顶格写, 配置项前面空4格, 最后的");" 顶格写.
比如:
<?php
return array(
'name' => 'jack',
'address' => 'Chengdu',
);
=====================================================
tp的页面跳转和重定向?
-
跳转和重定向都可以实现类似的功能, 只是: 页面跳转包含的东西和功能 对于tp来说更多, tp对页面跳转提供了更多的支持和内容. 比如跳转 tp提供了 模板 , 是: 'Tpl > dispatch_jump.tpl', 跳转还支持 ajax,功能 跳转还支持默认的跳转地址
$_SERVER[HTTP_REFERER
和 history.back(-1) -
而重定向, tp支持的功能就要简单得多,支持的更少. 只有你自己输入参数.
如果要使用 控制器/操作的方式 表示重定向, 就要用 类方法:$this ->redirect(....)
如果重定向的地址 不使用控制器的方式 , 使用纯粹的url地址,就用 全局函数redirect(..) -
其实 sucess 和 redirect的两种方式 实现结果和 效果上 都差不多, 你可以随意选择. 幸好! 在redirect跳转中, 也提供了 等待时间, 和 提示信息, 所以使用起来也是非常方便的!比如:
this->redirect('jump_addr', array('传递参数'), jump_wait_time, 'tip_message');
怎样禁止鼠标点击按钮的跳转页, 不能直接访问?
-
感觉要实现不能直接在地址栏中输入网址直接访问, 的唯一方法就是 用 表单的 post方式来检查, 用 IS_POST来判断. 而不能用 IS_GET方式来判断. 因为很多跳转的方式, 都是 IS_GET.
而且, 只要是 用 tp 的U 方法实现的 页面跳转, 不管你在 U 方法中 传不传递 参数, 其实都是 GET 方法, 所以 你用 if(!IS_GET) 来判断, 是不会有效的! 比如下面这个就可以直接访问这个页面,而不会跳转到index的
{:U('to_addr')}, 或者: {:U('to_addr?id=10')}
echo $_SERVER['REQUEST_METHOD'].'<br>'; // 这个将显示 GET
if(!IS_GET){
$this->redirect('index'); /// 不会跳转
}
- 应该将按钮放在 form表单中. 因为表单可以设置为 post, 然后在跳转页面检查是否是 IS_POST, 这样如果不是由按钮点击而来的, 就不能直接在地址栏输入地址 而直接访问
- 虽然这样的方式, 并不是那么优雅 :inelegant "不优雅"的实现方式. 所幸的是: 表单form 还有一个target的属性(就像超链接a的属性), 可以指定 form提交表单后跳转的页面位置:_parent, _top, _self, 或者是某个名字, 如同 `iframe name="certain_form_jump_target">`, 而且可以实现表单提交不刷新页面. !默认的!target就是_self自身页面, 所以form提交到不新开的页面中, 即自身所在的窗口中.