创梦流浪人 的个人博客 / 1 / 16 / 创建于 1年前 / 更新于 1年前
在使用Thinkphp这些框架的时候有那些用PHP的命令行来直接生成控制器,应用等等,就比较好奇,想要研究一下。在网上翻找了半天发现这方面的东西很少,找到的都是简单讲了一下,也没说具体怎么实现的,很想知道。
用原生的PHP,比如我想要生成一个a.php文件,那么应该怎么做才能实现
问题已经解决了:定义好模板文件,然后在获取命令行参数,进行替换。
感谢各位的帮助。
本作品采用《CC 协议》,转载必须注明作者和本文链接
可以使 ThinkPHP(6.x) 命令行 其他版本应该都是一样的。
php think make:controller app\admin\controller\Login // 或 php think make:controller Login
@1648785 还是没有看懂,可以举个例子。如果用框架,就没有必要折腾,直接用框架的即可。
@1648785 可以查看 php fopen 和 file_put_contents 相关文档。
@1648785 不谢,相关例子
其实核心就是定义好模板文件,比如模板:
<?php declare (strict_types = 1); namespace {%namespace%}; class {%className%} { }
然后在获取命令行参数,进行替换,最后file_put_contents输入到真实文件里面去
直接写呗,$_SERVER['argv'] 就可以获取到从命令行传进来的参数,getopt 可以解析参数,剩下的就跟正常写代码一样,无非就是拼接,然后 file_put_contents。
$_SERVER['argv']
file_put_contents
不过,为了方便,建议使用 symfony/console 作为基础包。
php index.php
给你写了一个原生的小demo:新建模板文件controller.plain:
controller.plain
<?php class {%className%} { // }
新建build.php文件:
build.php
<?php // 去除第一个参数(脚本名称) $argv = $_SERVER['argv']; array_shift($argv); $className = $argv[0]; // 读取模板 $plain = file_get_contents('./controller.plain'); // 替换模板变量 $classFile = str_replace(['{%className%}'], [$className], $plain); // 写入生成的文件 file_put_contents($className . '.php', $classFile); echo 'created successfully.';
执行php build.php DemoController,那么就会在当前目录生成DemoController.php文件
php build.php DemoController
DemoController.php
很简单,看下文件操作,最简单是就是file_put_contents(), 脚本可以直接接受参数 $argv,$argc 等。PHP 基本知识
全局搜下.stub,有你想要的
我要举报该,理由是:
可以使 ThinkPHP(6.x) 命令行 其他版本应该都是一样的。
其实核心就是定义好模板文件,比如模板:
然后在获取命令行参数,进行替换,最后file_put_contents输入到真实文件里面去
直接写呗,
$_SERVER['argv']
就可以获取到从命令行传进来的参数,getopt 可以解析参数,剩下的就跟正常写代码一样,无非就是拼接,然后file_put_contents
。不过,为了方便,建议使用 symfony/console 作为基础包。
给你写了一个原生的小demo:
新建模板文件
controller.plain
:新建
build.php
文件:执行
php build.php DemoController
,那么就会在当前目录生成DemoController.php
文件很简单,看下文件操作,最简单是就是file_put_contents(), 脚本可以直接接受参数 $argv,$argc 等。PHP 基本知识
全局搜下.stub,有你想要的