zoukankan      html  css  js  c++  java
  • Yii2的相关学习记录,初始化Yii2(二)

    前面已经将Yii2下载下来了,那我们就需要能实际的使用。

    一、初始化,因为我都是在windows系统下,所以用cmd命令打开下载下来的Yii2的根目录。然后运行下面命令:

    init

    会提示选择0为开发环境,1为生成环境。一般选生产环境。后期可以同样输入此命令来切换开发环境和生产环节,但是需要注意切换时需要提前在“environments”目录中中提前写好生产环境的配置,以免切换时覆盖丢失配置项,后面还会说,现在继续往下走。

    二、配置数据库,现在前台访问地址为:http://localhost/vishun/backend/web/index.php,后台访问地址为:http://localhost/vishun/frontend/web/index.php,其中vishun是我Yii框架安装的目录名称。现在访问时会报数据库连接的错误,因为数据库没有连接上,所以,我们需要先创建一个数据库(个人比较喜欢用phpmyadmin),然后在Yii2中配置数据库参数:

    配置文件在三个地方存在,common/config,frontend/config,backend/config,一般来说common是放前后台都会用到的配置文件,而frontend和backend则是放各自的配置文件,如果重复,则前后台的会覆盖公用的。

    每个文件夹下又分为main.php和main-local.php,这主要是为了团队协作,一般团队成员都在自己的电脑环境下开发,然后提交到git或svn上。所以团队成员用自己的数据库账号密码什么的,如果提交上去,其它团队成员更新下来和自己的账号密码不对,就会产生错误,所以数据库等配置文件放在*-local文件中,提交时*-local的文件不提交。

    但是如果不提交还是会有问题,像是一个新成员加入,直接从git上下载代码下来,但是数据库配置文件由于所有人都没有提交,整个程序不完整,那就导致新成员根本就没有数据库的配置。所以这里还需要用到上方提到过的environments目录,这里面有dev(开发)和prod(生产)两种环境,主要是存储*-local文件的模板。在使用init命令时,就会根据这里面的文件来生成*-local文件,然后新成员在文件中填上自己的数据库账号密码就可以使用了。

    以上团队环境详细说明可以看这里:深入理解Yii2.0--环境和配置文件,说的非常详细。

    三、配置完成后就可以,还是会报错,但不是报数据链接的错误了,而是user表没有找到。那我们就创建user表。Yii2高级版框架中user表已经写好了,可以打开console/migrations下有*_init.php文件,这个就是写好的user表。只需在cmd中Yii2根目录下运行命令:

    yii migrate

    这样user表就创建好了。这时访问前后台都OK了。migrate命令是Yii框架迁移或者修改数据库的工具,尤其的在团队协作中,如果成员在本地电脑上增加了一张表,如何告知其它成员呢,用yii migrate/create命令就可在console/migrations创建一个改动,然后就增加的表内容写在里面,提交后其它成员更新后,用yii migrate命令,即可将自己的数据库同步到最新的,绝对是十分方便。migrate功能还很多,自己也没完全弄清楚呢,可能在下面的前后台分离章节中还会说。

    四、顺便说下配置邮箱吧。完成前三步功能时,就可以注册个会员看看,当忘记密码时,则在登录界面点击忘记密码,需要通过邮件来找回,所以我们需要配置下邮箱:

    Yii2高级版框架中是集成了邮箱类的,在common/config/main-local.php文件可以看到:

    'mailer' => [
        'class' => 'yiiswiftmailerMailer',
        'viewPath' => '@common/mail',
    ],

    这就是相关的配置文件,之所以放到*-local文件中,因为包含个人账号的敏感信息。

    上面的配置信息是不全的,需要填写发件邮箱,端口号什么的,所以修改上面为:

    'mailer' => [
        'class' => 'yiiswiftmailerMailer',
        'viewPath' => '@common/mail',
        // send all mails to a file by default. You have to set
        // 'useFileTransport' to false and configure a transport
        // for the mailer to send real emails.
        'useFileTransport' => false,
        'transport' => [  
            'class' => 'Swift_SmtpTransport',  
            'host' => 'smtp.163.com', //我这里用163邮箱 
            'username' => '你的邮箱名',  
            'password' => '你的邮箱密码',  
            'port' => '25',  
            'encryption' => 'tls',
        ],
      //'messageConfig'=>[  
       //  'charset'=>'UTF-8',  
       //  'from'=>['你的邮箱名'=>'robot']  
       //],             
    ],        

    而发送邮件的整个流程方法在Yii2高级版中都写好了,所以只需要配置就能发送了。

    配置完上方后,可能找回密码发送邮件是应该还会报错,类似这种:

    Expected response code 250 but got code "553", with message "553 Mail from must equal authorized user

    这是因为有些邮件服务器要求from和username必须一直,例如网易的服务器,而在frontend/models/PasswordResetRequestForm.php中的sendEmail方法规定在63行左右,

     ->setFrom([Yii::$app->params['supportEmail'] => Yii::$app->name . ' robot'])

    From是取得supportEmail参数,这个参数在common/config/params.php中定义了默认为:admin@example.com,配置文件中的邮箱名和这个不符合所以报错。方法一是把这个参数改成‘你的邮箱名’就可以正常发送了;方法二是将上方配置文件messageConfig注释的取消,然后->setFrom这行删除掉。(所有的这些首先确保先开通smtp服务)

    顺便说下,因为你邮箱配置实在*-local文件中,所以为了其它成员也都能用你这个配置,应该在environments/dev/common/main-local.php中添加:

    'mailer' => [
        'class' => 'yiiswiftmailerMailer',
        'viewPath' => '@common/mail',
        // send all mails to a file by default. You have to set
        // 'useFileTransport' to false and configure a transport
        // for the mailer to send real emails.
        'useFileTransport' => false,
        'transport' => [  
            'class' => 'Swift_SmtpTransport',  
            'host' => '', //空着,让其他人自己填写
            'username' => '',  
            'password' => '',  
            'port' => '',  
            'encryption' => 'tls',
        ],
    
        'messageConfig'=>[  
        'charset'=>'UTF-8',  
        'from'=>[''=>'robot']  
        ],             
    ],        

    这样,其他人更新时只需init命令一下,然后要填上自己的邮箱账号就可以发送邮件了。

    很多时候邮件填写都是从数据库获取的,这时候就不应该在配置文件中了,而是应该单独写个类,(类似新建components文件并引入,写在这里面),顺便封装下发送方法。我自己也没实现过,只是思路而已。

    以上就是Yii2高级版的初始化,下节可能记录下如何套用好看的后台界面和gii自定义模板什么的。睡觉了先。

  • 相关阅读:
    抽象方法真的不能实例化么?
    java中静态属性和和静态方法的继承问题 以及多态的实质
    Java中数据类型转换问题
    Java中反射机制和Class.forName、实例对象.class(属性)、实例对象getClass()的区别
    java的static块执行时机
    代理服务器:正向代理和反向代理
    阿里巴巴的一些面试题(无答案)
    pl/sql实现打印九九乘法表
    java中的标记接口(标签接口)
    spring boot中log4j冲突问题和解决办法
  • 原文地址:https://www.cnblogs.com/vishun/p/5327531.html
Copyright © 2011-2022 走看看