有两种创建项目的方式:

一是用多个单入口文件, 一个入口文件对应着一个项目, 如前台/后台/会员中心等

二是用一个单入口, 创建项目分组

对于有多个入口文件的 情况, 配置文件的共享问题?

不管是前台还是后台项目, 都首先是去访问自己的配置文件, 如果没有设置项, 然后是访问thinkphp的配置文件

为了解决前台/后台等多个项目共享一个配置, 避免 同样的配置 在前台/后台等多个项目中重复书写, 有两种方案:

一是: 分别在前台和后台的配置文件中互相包含, 这样的话,实际上, 前台配置文件和后台配置文件, 就完全相同了. 实际上两个配置

文件既完全相同, 重复书写了, 而且更严重的是, 这样的配置,根本就不合理. 而且会出错...

二是, 分别保持前台和后台的 各自独立的 原来的 内容不同的 各自使用的 配置文件, 然后 另外创建一个配置文件, 把各个模块项目 要共享的/ 公用的配置项

写在这个共享的配置文件中, 最后, 让前台和后台的配置文件, 都 "包含 / 合并/ return array_merge(include('共享的配置文件'), $config);

***注意, 最最重要的是: 所有项目的配置 文件 "包含其他 配置文件或 其他 共享的配置文件" 的时候, include 的路径 要写成 "相对于 包含当前配置文件的那个项目所对应的单入口文件 而言, 如index.php, admin.php" 而不是 相对于 当前这个配置文件 ***

  1. /* 前台项目 配置文件 */
  2. <?php
  3. $config = array(
  4. //'配置项'=>'配置值'
  5. 'name'=>'obama',
  6. );
  7. return array_merge(include('./Conf/config.php'),$config); // 跟前台index.php同级的Conf配置目录下的公用配置文件
  8. ?>

输出变量的时候, 推荐使用dump()函数, 而不是var_dump(), 因为前者会格式化输出, 会自动换行, 呈树形目录 结构的形式输出!

在项目中, 创建自己 定义的函数, 并加载进来?

  1. 在项目的Common文件夹下, 创建common.php文件, 在该文件中书写自定义函数;

    这时, thinkphp就可以 "自动" 加载, 也就是你在 "当前" 项目中就可以直接使用了
  2. 在项目的Common文件夹下, 创建任意名称的php文件,如 function.php

但是在上面 的第二中情况下, 就不能自动加载, 要手动加载:

一是: 在对应项目的config.php文件中添加配置项: 'LOAD_EXT_FILE' => 'function' // 注意只写文件名, 不要加扩展名

二是: 或者用 load方法临时加载: load('@.function'); // 这里的@就是指当前项目的Common文件夹, .function也不要加扩展名.

注意, dump是thinkphp中的函数, 而不是php的原生的函数!

========================================

thinkphp的逻辑组织?

在总的 "根目录" 下:

入口文件: 对应着一个项目, 如index.php 就对应着Index项目, admin.php 就对应着 Admin项目;

在每一个项目下, 就只有 一个概念了 : 控制器 / 方法.

你可以指定: m=控制器名称 & a=方法; 也可以 直接输入 控制器和方法名称: ...../think/index.php/ index(控制器)/index(方法)

thinkphp的 控制器方法 对应的 模板文件?

  1. 控制器Index/ 方法Show() 对应的模板文件:
  2. Tpl模板文件夹下的 "文件夹 Index" , 下的 "show.html"文件.
  3. 即:
  4. 控制器 Foo, <-----> Tpl下的 同名文件夹 Foo
  5. 方法:bar(), <-----> Foo下的同名html文件: bar.html
  6. // 方法名都是小写!

关于thinkphp下的css和js目录的引入?

在本地/本机上写代码的时候, 可以使用绝对路径, 如: c:/folder, 也可以使用相对路径, 如: ../folder/foo/

但是, 在服务器上 部署代码的时候, 由于服务器对本地目录的屏蔽, 你是看不到服务器机器上的真正目录的,

而是从 服务器网站根目录下开始 的, 你只能看到网站的根目录, 而且是用 "/斜杠" 来表示这个站点根目录的! 所有的站点

内容都是从 这个 根目录 开始的. 这个 "/" 就代表localhost, 就代表 服务器的域名, 如: www.baidu.com

css 和js是放在 根目录下的 Public文件夹下的,

在 模板文件中, 使用 _ _ PUBLIC _ _ 就可以表示 /站点根目录/Public.

但是, __PUBLIC__并不是一个常量, 而且只能在 模板文件中 使用有效, 其他地方都无效! 是一个模板替换.

也就是说, thinkphp有很多的 内部约成和规定, 而这一切都是为了 开发的快捷和方便!

关于Css/Js/Image放到Public的写法

有两种方法:

  • 通常, 对于前台, 就放在根目录下的Public文件夹下, 在模板中, 直接可以使用 __PUBLIC__来引用 /think/Public这个文件夹.

  • 那么对于后台, 为了区别, 就可以把 后台的Css/Js/Image文件夹, 放在后台项目的 Tpl目录下的Public文件夹中. 这时候, 在后台的config.php中, 就要做

    一些配置才行:

    1. 在后台的config.php文件中添加配置项:
    2. 'TMPL_PARSE_STRING' => array(
    3. '__PUBLIC__' => __ROOT__.'/'.APP_NAME.'/Tpl/Public',
    4. ),
    5. // 这里要注意, Public 后面不能跟斜线,
    6. // 因为一般在对应的模板 文件中, 包含 css文件时, 都会在 __PUBLIC__的后面加斜线,
    7. // 所以, 根据 字符串替换的原理, 如果这里再加上 斜线, 就会重复了.两个斜线, 而出错!

要临时禁止显示错误?

不用去修改 错误报告的级别,

直接去设置 错误是否显示就可以了! ini_set('display_errors', 0); 最好用0, 不用off

APP_NAME只是thinkphp中定义的全局常量, 并不是php的原生 常量

php定义的原生常量 , 好像 都没有 最后 的 路径分隔符 : /

如__ROOT__ ,

thinkphp-3的更多相关文章

  1. 制作类似ThinkPHP框架中的PATHINFO模式功能

    一.PATHINFO功能简述 搞PHP的都知道ThinkPHP是一个免费开源的轻量级PHP框架,虽说轻量但它的功能却很强大.这也是我接触学习的第一个框架.TP框架中的URL默认模式即是PathInfo ...

  2. 在 SAE 上部署 ThinkPHP 5.0 RC4

    缘起 SAE 和其他的平台有些不同,不能在服务器上运行 Composer 来安装各种包,必须把源码都提交上去.一般的做法,可能是直接把源码的所有文件复制到目录中,添加到版本库.不过,这样就失去了与上游 ...

  3. ThinkPHP+Smarty模板中截取包含中英文混合的字符串乱码的解决方案

    好几天没写博客了,其实有好多需要总结的,因为最近一直在忙着做项目,但是困惑了几天的Smarty模板中截取包含中英文混合的字符串乱码的问题,终于解决了,所以记录下来,需要的朋友看一下: 出现乱码的原因: ...

  4. ThinkPHP 模板substr的截取字符串函数

    ThinkPHP 模板substr的截取字符串函数在Common/function.php加上以下代码 /** ** 截取中文字符串 **/ function msubstr($str, $start ...

  5. thinkphp数据的查询和截取

    public function NewsList(){ $this->assign('title','news'); $p = I('page',1); $listRows = 6; $News ...

  6. [转]thinkphp 模板显示display和assign的用法

    thinkphp 模板显示display和assign的用法 $this->assign('name',$value); //在 Action 类里面使用 assign 方法对模板变量赋值,无论 ...

  7. [转]ThinkPHP中实例化对象M()和D()的区别,select和find的区别

    1.ThinkPHP中实例化对象M()和D()的区别 在实例化的过程中,经常使用D方法和M方法,这两个方法的区别在于M方法实例化模型无需用户为每个数据表定义模型类,如果D方法没有找到定义的模型类,则会 ...

  8. Kindeditor在ThinkPHP框架下的使用

    1.简单调用Kindeditor的图片上传功能: a.Html部署图片预览,记录图片上传成功之后的路径,以及上传图片点击按钮 <tr> <td>活动图片:</td> ...

  9. 在thinkphp中,写的博文标签多对多关系的标签频率统计算法

    常常看到别人的博客里面,或者网站里面有这样随机颜色,但字体大小与标签出现频率有关的标签云,于是自己就想写一个.至于颜色的随机显示,那就很简单了,这里就不列代码. 因为正在学thinkphp,所以数据查 ...

  10. thinkphp怎么修改配置进入默认首页

    thinkphp文件夹下config 里面有个convention.php文件 里面有三个配置 'DEFAULT_MODULE' => 'Home', // 默认模块 'DEFAULT_CONT ...

随机推荐

  1. linux 误删文件恢复

    文档太给力了!误删了几个重要文件,抖抖嗦嗦偷偷恢复了,救了我!!! http://jingyan.baidu.com/article/2f9b480d6c2bcd41cb6cc223.html 注意: ...

  2. ecshop /pick_out.php SQL Injection Vul By Local Variable Overriding

    catalog . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 在进行输入变量本地模拟注册的时候,没有进行有效的GPC模拟过滤处理,导出 ...

  3. IAR使用记录

    1. Project-->Options... 更改器件:General-->Target-->Device 添加其它需包含的目录:C/C++ Compiler-->Prepr ...

  4. ansible模块debug

    示例: # Example that prints the loopback address and gateway for each host - debug: msg="System { ...

  5. checking for tgetent()... configure: error: NOT FOUND!

    今天centos出现了下面的异常: checking for tgetent()... configure: error: NOT FOUND! You need to install a termi ...

  6. Altium Designer 15 --- PCB 3D View

    press 3 key to swith to 3D view, and press shift key and dont' loose your grip, hold the right mouse ...

  7. JavaWeb---总结(十二)Session

    一.Session简单介绍 在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下).因此,在需要保存用户数据时,服务 ...

  8. 【原】react+redux实战

    摘要:因为最近搞懂了redux的异步操作,所以觉得可以用react+redux来做一个小小的项目了,以此来加深一下印象.切记,是小小的项目,所以项目肯定是比较简单的啦,哈哈. 项目效果图如图所示:(因 ...

  9. Java单例模式——并非看起来那么简单

    版权声明:本文为[viclee]原创,如需转载请注明出处~ Java中单例(Singleton)模式是一种广泛使用的设计模式.单例模式的主要作用是保证在Java程序中,某个类只有一个实例存在.一些管理 ...

  10. js022-高级技巧

    js022-高级技巧 本章内容: 使用高级函数 防篡改对象 Yielding Timers 22.1 高级函数 1.安全的类型检测 2.作用域安全的构造函数 构造函数实际上是一个使用new操作符调用的 ...