热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

从今日起开始我thinkphp5.0rc4个人使用总结之旅001自动生成应用目录及相应文件

学习php时间较长,有近一年了,期间做了四个项目,有两个已上线运行,包括两个采用appcan打包的app安卓应用。当修改完各

学习php时间较长,有近一年了,期间做了四个项目,有两个已上线运行,包括两个采用appcan打包的app安卓应用。当修改完各种bug递交给客户时,不得不说我是有些欣喜的,然而,仅过几天,又开始限于低落的情绪。原因是感觉自己的项目写得比较烂,一开始没有跟客户进行充分的沟通,导致客户一而再、再而三的反复提出需求,当然也有自己考虑不周到产生的各种bug。另一个原因就是没有合理分离数据处理和业务逻辑处理,将二者都放在控制器进行,导致后期修改时,查阅代码十分不便(幸亏从头到尾都是我一人写的,十分熟悉!否则,一个控制器近一千行的代码改起来确实费劲!)此后几周,则进入IOS学习ing。前两天同事问我有关tp用那个版本框架好,我随口说了一句tp5.0,这个是重构的版本,据说性能有大幅提高,采用了惰性加载技术。于是,他就下了一个版本,但他发现并不能很好上手。于是找我去给看看,我也是好几月前偶尔看过介绍,仅知道目录结构,测试过控制器而已。当我看他报错时,报的是找不到控制器,于是我居然改了3-4分钟也没改好,其它同事催着吃中饭,只好作罢。吃饭那会功夫,翻开手机看了一下tp5.0的手册,回去才给他改好。当时那个出糗啊!

这之后,也一直忙于IOS学习中,boolean类型我在php中居然无脑的打成YES或者NO,我擦。。。。。这个啊!

今早,起得早,想起这事,觉得当初tp3.2.2自己都没怎么掌握好,仅是会用而已。莫不如学习这个类似lavarel风格的全新架构的tp5,于是下了一个版本,居然到rc4了。官网说距离正式发行不远了。我这想,这必须掌握先机啊。痛定思痛,决定在这个好久不上的csdn上开博客吧!作为自己成长的见证!废话不多说了,直接上代码

define('APP_PATH', __DIR__ . '/../application/');
// 加载框架引导文件
require __DIR__ . '/../thinkphp/start.php';


###################  1 ####################注意,该段代码必须位于require __DIR__ . '/../thinkphp/start.php';下,因为需要加载think的Build类

 // 自动生成admin模块
// \think\Build::module('admin');


###################  2 ####################注意事项同上

// 读取自动生成定义文件
$build = require '../build.php';
// 运行自动生成
\think\Build::run($build,'app',false);

这个 是tp5.o的入口文件的内容,井号下面都是我参考手册加的内容。

#1的地方是为应用增加一个admin模块。 

#2的地方是在bulid.php文件形成一个文档结构,然后再首次运行时自动给你生成,注意:如果该目录或文件已存在,系统则会跳过,默认的并不会覆盖!

我的build.php文件内容如下:

return [
    // 生成应用公共文件
    '__file__' => ['common.php', 'config.php', 'database.php'],


    // 定义demo模块的自动生成 (按照实际定义的文件名生成)
    'index'     => [
        '__file__'   => ['common.php'],
        '__dir__'    => ['behavior', 'controller', 'model', 'view'],
        'controller' => ['Index', 'Test', 'UserType'],
        'model'      => ['User', 'UserType'],
        'view'       => ['index/index'],
    ],
    // 其他更多的模块定义
    'user'      =>  [
        '__file__'  =>  ['common.php','functions.php','config.php','route.php','.htaccess'],
        '__dir__'   =>  ['behavior','controller','model','view','data','logic'],
        'controller' => ['Index', 'Test', 'UserType'],
        'model'     =>  ['User','UserType','UserGroup'],
        'view'      =>  ['Index/user','UserType/userType','UserGroup/userGroup'],
    ],
];

该文件位于应用的根目录,你可以将它移至application下,仅需修改入口文件$build = require APP_PATH.DS.'build.php';即可。

然后在浏览器输入localhost/thinkphp5.0rc4/public即可运行。加上public原因是tp5.0的入口文件默认位于应用根目录下的public文件夹内。

完整的访问地址是:localhost/thinkphp5.0rc4/public/index.php/index/index/index.html,看到这里有没有很熟悉?index.php/index/index/index.html,哈哈!

接着再来访问:http://localhost/thinkphp5.0rc4/public/index.php/user/index/index.html,运行看看,什么?报找不到模板错误?那是必须的啊,之前build.php的view目录是Index/user嘛!我们去应用根目录下的application目录,进入user模块,进入controller控制器目录打开Index.php,删掉系统自动生成的 return 一堆字符串。整个文件改成如下:

namespace app\user\controller;

class Index
{
    public function index(){
    $view = new \think\View();
    return $view->fetch('user');
    }
}

ctrl+s保存,再刷新刚才的url,看,是不是一个空白页出来了?

我们再来看看tp5.0手册给出的自动生成目录样例

// 定义应用目录
define('APP_PATH', __DIR__ . '/../application/');
// 加载框架引导文件
require __DIR__ . '/../thinkphp/start.php';
// 读取自动生成定义文件
$build = include 'build.php';
// 运行自动生成
\think\Build::run($build,'application',true);
如果你直接复制拿过来运行(前提是不修改原有目录结构),你将会遇到两种错误!

1.找不到build.php文件.为什么?因为默认的build.php位于框架根目录下,即是index.php的父级目录。

因此,因该改成:  $build = include '../build.php';

2.访问http://localhost/thinkphp5.0rc4/public/index.php/user/index/index.html,找不到控制器。即便是你修改成http://localhost/thinkphp5.0rc4/public/index.php/user/indexController/index.html依然找不到控制器,为什么?

因为系统加载应用配置文件application/config.php默认的命名空间是

// 应用命名空间
    'app_namespace'          => 'app',

而你build的时候是‘application’,系统默认application目录下所有控制器的命名空间皆为app而不是application,

所以,要么,你将框架自带的控制器、model文件的命名空间手动改为application,要么就删掉刚才所建的目录和文件,改入口文件的build::run参数

\think\Build::run($build,'app',false);

最后,我们看看Build类的静态方法run

public static function run(array $build = [], $namespace = 'app', $suffix = false)

{// 锁定$lockfile = APP_PATH . 'build.lock';if (is_writable($lockfile)) {return;} elseif (!touch($lockfile)) {throw new Exception('应用目录[' . APP_PATH . ']不可写,目录无法自动生成!
请手动生成项目目录~', 10006);}foreach ($build as $module => $list) {if ('__dir__' == $module) {// 创建目录列表self::buildDir($list);} elseif ('__file__' == $module) {// 创建文件列表self::buildFile($list);} else {// 创建模块self::module($module, $list, $namespace, $suffix);}}// 解除锁定unlink($lockfile);}

首先是判断临时锁文件是否可写,如果可写,则创建临时锁文件。然后根据自定义的build.php文件依次创建目录、文件、写入文件内容等。个人认为,加入临时锁文件是为了防止多人访问,同时写入应用目录及文件造成异常吧,个人理解为目录文件写入保护锁!


推荐阅读
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 本章将深入探讨移动 UI 设计的核心原则,帮助开发者构建简洁、高效且用户友好的界面。通过学习设计规则和用户体验优化技巧,您将能够创建出既美观又实用的移动应用。 ... [详细]
  • PHP 编程疑难解析与知识点汇总
    本文详细解答了 PHP 编程中的常见问题,并提供了丰富的代码示例和解决方案,帮助开发者更好地理解和应用 PHP 知识。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • Explore how Matterverse is redefining the metaverse experience, creating immersive and meaningful virtual environments that foster genuine connections and economic opportunities. ... [详细]
  • CSS 布局:液态三栏混合宽度布局
    本文介绍了如何使用 CSS 实现液态的三栏布局,其中各栏具有不同的宽度设置。通过调整容器和内容区域的属性,可以实现灵活且响应式的网页设计。 ... [详细]
  • C++实现经典排序算法
    本文详细介绍了七种经典的排序算法及其性能分析。每种算法的平均、最坏和最好情况的时间复杂度、辅助空间需求以及稳定性都被列出,帮助读者全面了解这些排序方法的特点。 ... [详细]
  • 本文详细探讨了Netty中Future及其子类的设计与实现,包括其在并发编程中的作用和具体应用场景。我们将介绍Future的继承体系、关键方法的实现细节,并讨论如何通过监听器和回调机制来处理异步任务的结果。 ... [详细]
  • 本文介绍如何使用 NSTimer 实现倒计时功能,详细讲解了初始化方法、参数配置以及具体实现步骤。通过示例代码展示如何创建和管理定时器,确保在指定时间间隔内执行特定任务。 ... [详细]
  • 如何优化2060显卡设置以提升《Apex英雄》游戏体验
    《Apex英雄》作为一款热门的战术竞技游戏,吸引了大量玩家。本文将探讨如何通过优化GeForce RTX 2060显卡设置,确保在《Apex英雄》中获得最佳性能和流畅的游戏体验。 ... [详细]
  • 本文介绍如何通过SQL查询从JDE(JD Edwards)系统中提取所有字典数据,涵盖关键表的关联和字段选择。具体包括F0004和F0005系列表的数据提取方法。 ... [详细]
  • 如何高效创建和使用字体图标
    在Web和移动开发中,为什么选择字体图标?主要原因是其卓越的性能,可以显著减少HTTP请求并优化页面加载速度。本文详细介绍了从设计到应用的字体图标制作流程,并提供了专业建议。 ... [详细]
  • 本文详细介绍了如何通过命令行启动MySQL服务,包括打开命令提示符窗口、进入MySQL的bin目录、输入正确的连接命令以及注意事项。文中还提供了更多相关命令的资源链接。 ... [详细]
  • 扫描线三巨头 hdu1928hdu 1255  hdu 1542 [POJ 1151]
    学习链接:http:blog.csdn.netlwt36articledetails48908031学习扫描线主要学习的是一种扫描的思想,后期可以求解很 ... [详细]
  • 本文将详细介绍在Windows 7环境下,检查U盘启动盘是否制作成功的多种方法,包括通过BIOS设置和使用模拟启动工具。 ... [详细]
author-avatar
怪物-pp_912
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有