ljfphp 2019-03-11 13:05:48 2107次浏览 0条回复 0 0 0
一、背景

博主新接手的项目是使用Yii框架开发的,在使用yii的控制台命令的时候报错:The "id" configuration for the Application is required,那咱们就来研究研究这个到底是为啥。

二、排错过程

1、错误是哪里报的

用过Yii框架的都知道,在入口文件index.php里面,有一句是实例化application对象:

$application = new yii\console\Application($config);
$exitCode = $application->run();

打开Yii/base/application.php文件,里面有个preInit方法,定义了id缺少的报错信息,根据这个信息,可以知道肯定是缺少了应用id。但是应用id这东西是yii的标配,是必须会有的东西,那就是配置文件的原因了。

2、查看配置文件

博主查看自己本地的配置文件,发现已经定义了id这个属性,那么为什么还是会找不到呢?随手修改一下配置文件,还是一样的报错。这是不是就意味着我本地的这个配置文件根本就没用到?

后来在网上找到一篇文章,人家也是说可能是配置文件的原因: https://stackoverflow.com/questions/33496841/yii2-error-the-id-configuration-for-the-application-is-required

3、查看我输入的命令行命令

php C:/phpStudy/PHPTutorial/WWW/xxx/yii 控制器/方法 --appconfig=C:/phpStudy/PHPTutorial/WWW/xxx/xxx/config/main-release.php

发现后面有个--appconfig属性,这个东西好像是指定配置文件的。去官方文档一看,果然,就是因为我指定的配置文件是console下面的配置文件,所以才报的错。得了,把配置文件都给弄好,继续测试。

4、新的问题

The configuration file does not exist: 配置文件不存在 说实话,当时看到这个报错,内心有点崩溃,问题肯定是在配置文件上出错了,该引入新建的配置也都弄好了,结果你跟我说配置文件不存在?没办法,继续找问题,刚才还是能加载配置文件的,这会儿为什么加载不了了呢?

问题所在:

如图所示,多了个空格,emmm,有点难受。

三、关于命令行传参问题

1、传参数的写法

Yii控制台官方文档

这部分大家可以看看官方的文档,需要跟参数的话,直接在指定配置文件之前加上参数即可,类似于这样的:

php C:/phpStudy/PHPTutorial/WWW/xxx/yii 控制器/方法 20181102 2 --appconfig=C:/phpStudy/PHPTutorial/WWW/xxx/console/config/main-release.php 

这里的20181102和2都是我传的参数。

2、接收参数

/**
 * 这部分主要是获取用户传过来的日期参数,进行自动查询等操作
 * @params $g_data 传过来的时间日期参数,格式为20180603
 * @params $projectID 默认为5
 * @params $type  获取的节点类型,方便后面的查询等
 */
public function actionXzzz($params = '',$type = 0)
{

    $this->params = $params;
    $this->type = $type;

}

      

在控制器中直接把咱们在命令行中加的参数,当做控制器方法的参数传进去即可。可以给参数一个默认值,这样的话能防止一些小bug。使用的话直接拿来用就可以。

博主从laravel转到Yii框架,感觉Yii框架还是挺麻烦的,不过php发展到现在,各个框架之间其实已经很接近了。不管是从目录结构还是到整体的封装,composer和ORM的使用等,都有一定的相似性。挺好的,以前的php是一盘散沙,改用框架的成本非常之高。现在嘛,维护成本明显下降,php会越来越好的!

end

    没有找到数据。
您需要登录后才可以回复。登录 | 立即注册