1. thinkPHP5.1的运行流程图

运行流程和配置选项的获取 - 图1


2. 配置的获取和设置

  • 主要有两种方式
    • 一种是通过 Config类的 get 和 set 方法 / pull()方法
    • 另一种就是通过助手函数来获取和设置。

2.1 No input file specified问题

  • 问题描述
    • 有可能当配置完成本地域名如我的 tp5.1.com 就可以直接访问public/index.php ,但是可能加上路劲继续访问后会有 No input file specified.打印在页面。

解决办法一 : 路径 :\public.htaccess.php中配置,改一下配置,其实也就是添加了一个?

  1. <IfModule mod_rewrite.c>
  2. Options +FollowSymlinks -Multiviews
  3. RewriteEngine On
  4. RewriteCond %{REQUEST_FILENAME} !-d
  5. RewriteCond %{REQUEST_FILENAME} !-f
  6. RewriteRule ^(.*)$ index.php [L,E=PATH_INFO:$1]
  7. </IfModule>

解决办法二 : 与php版本有关 PHP版本5.6以上都会出现这个问题 降低版本,这个方法不是太好,谁TM愿意用低的版本

2.2 dump函数

  • 问题描述:
    • php其实是没有这个函数的,dump()函数是thinkPHP自定义的函数,它的作用和var_dump()一样,但是它在浏览器上的输出更为友好一些。

定义的位置 thinkphp\library\think\Debug.php

  1. /**
  2. * 浏览器友好的变量输出
  3. * @access public
  4. * @param mixed $var 变量
  5. * @param boolean $echo 是否输出 默认为true 如果为false 则返回输出字符串
  6. * @param string $label 标签 默认为空
  7. * @param integer $flags htmlspecialchars flags
  8. * @return void|string
  9. */
  10. public function dump($var, $echo = true, $label = null, $flags = ENT_SUBSTITUTE)
  11. {
  12. $label = (null === $label) ? '' : rtrim($label) . ':';
  13. if ($var instanceof Model || $var instanceof ModelCollection) {
  14. $var = $var->toArray();
  15. }
  16. ob_start();
  17. var_dump($var);
  18. $output = ob_get_clean();
  19. $output = preg_replace('/\]\=\>\n(\s+)/m', '] => ', $output);
  20. if (PHP_SAPI == 'cli') {
  21. $output = PHP_EOL . $label . $output . PHP_EOL;
  22. } else {
  23. if (!extension_loaded('xdebug')) {
  24. $output = htmlspecialchars($output, $flags);
  25. }
  26. $output = '<pre>' . $label . $output . '</pre>';
  27. }
  28. if ($echo) {
  29. echo($output);
  30. return;
  31. }
  32. return $output;
  33. }

2.3 配置获取-相关代码

  • 推荐使用Config类来获取配置而不是使用助手函数来获取问题。
  1. <?php
  2. namespace app\admin\controller;
  3. use think\facade\Config;
  4. class User
  5. {
  6. public function get()
  7. {
  8. // 获取全部的配置项
  9. // dump(Config::get());
  10. // 获取一个一级配置项
  11. // dump(Config::get('app.'));
  12. // 仅仅是为了获取一级配置项,更推荐使用pull()方法
  13. // dump(Config::pull('app'));
  14. // 获取一个二级配置项
  15. // dump(Config::get('app.default_lang'));
  16. // app是默认的一级配置前缀是可以省略的
  17. // dump(Config::get('default_lang'));
  18. // 查询一个二级配置项,此时database不可以省略
  19. // dump(Config::get('database.hostname'));
  20. // 判断是否具有某一个二级配置项 返回true代表有这个配置
  21. // dump(Config::has('database.hostname'));
  22. }
  23. public function set()
  24. {
  25. // 设置一个配置项
  26. // dump(Config::get('app.app_debug'));
  27. // Config::set('app.app_debug', false);
  28. // dump(Config::get('app.app_debug'));
  29. }
  30. public function helper()
  31. {
  32. // 助手函数不依赖于 Config类
  33. // 不传入参数获取全部的配置项
  34. // dump(config());
  35. // 和get类似传入参数获取你想要查看的配置
  36. // dump(config('app.'));
  37. // dump(config('app.default_return_type'));
  38. // 查询某个配置项是否存在
  39. // dump(config('?database.username'));
  40. // 设置某个配置项
  41. // dump(config('app.app_debug'));
  42. // config('app.app_debug', false);
  43. // dump(config('app.app_debug'));
  44. }
  45. }