使用 thinkphp6.0 时遇到一个报错,请问怎么解决?

2021-06-18 10:23:51 +08:00
 frozenway

是一个验证登录的代码,验证代码为

<?php
declare (strict_types = 1);

namespace app\admin\controller;

use think\facade\View;
use think\Request;
use app\admin\validate\Login as L;
use think\exception\ValidateException;

class Login{
    //
    public function index(Request $request){
        if($request->isPost()){
            $data = $request->post();
            $remember = $data['remember'] ?? 0;
            try{
            $result = validate(L::class)->check($data);//halt($result);
            }catch(ValidateException $e){
                halt($e);
            }
            
        }
        return View::fetch();
    }
}

验证器的代码为:

<?php
declare (strict_types = 1);

namespace app\admin\validate;

use think\Validate;

class Login extends Validate
{
    /**
     * 定义验证规则
     * 格式:'字段名' =>  ['规则 1','规则 2'...]
     *
     * @var array
     */
    protected $rule = [
        'username' => 'require|alphaNum|max:20',
        'password' => 'require|alphaNum|length:6,16',
    ];

    /**
     * 定义错误信息
     * 格式:'字段名.规则名' =>  '错误信息'
     *
     * @var array
     */
    protected $message = [
        'username.require' => '账号不能为空',
        'password.require' => '密码不能为空',
        'username.alphaNum' => '账号只能包含字母和数字',
        'username.max' => '账号字符最大长度为 20',
        'password.alphaNum' => '密码只能包含字母和数字',
        'password.length' => '密码的长度为 6 ~ 16',
    ];
}

执行后报这个错误,请问是哪里出了问题?

#0 [0]Error in Validate.php line 1600
Call to a member function has() on null
     * @param string $msg   错误信息
     * @param mixed  $rule  验证规则数据
     * @param string $title 字段描述名
     * @return string|array
     */
    protected function parseErrorMsg(string $msg, $rule, string $title)
    {
        if (0 === strpos($msg, '{%')) {
            $msg = $this->lang->get(substr($msg, 2, -1));
        } elseif ($this->lang->has($msg)) {
            $msg = $this->lang->get($msg);
        }

        if (is_array($msg)) {
            return $this->errorMsgIsArray($msg, $rule, $title);
        }

        // rule 若是数组则转为字符串
        if (is_array($rule)) {
        ```
2142 次点击
所在节点    PHP
11 条回复
frozenway
2021-06-18 10:26:30 +08:00
这里有 thinkphp 的官方大佬在吗?
justrand
2021-06-18 10:43:17 +08:00
错误信息不是说了么:function has() on null
那你看下走到这个函数的时候,$msg 传了啥过去了。
jay4497
2021-06-18 10:51:31 +08:00
$this->lang 这个 lang 没有初始化吧
jay4497
2021-06-18 11:09:18 +08:00
帮你召唤大佬
@topthink
littleylv
2021-06-18 11:21:56 +08:00
@justrand #2
Call to a member function has() on null 说的并不是 has 的参数$msg 有问题,而是调用 has 的实例$this->lang 是 null
frozenway
2021-06-18 11:41:27 +08:00
@littleylv 是 null,但是不清楚为什么是 null
frozenway
2021-06-18 11:43:20 +08:00
@jay4497 这个 lang 是 topthink 的框架内核文件,也没法改
ben1024
2021-06-18 13:51:30 +08:00
@frozenway
1.增加下挂载语言包试下,
2.设置默认语言中文
3.修改提示为英文(作用不大)

应该使用了其他语言触发了语言包翻译
qwertyzzz
2021-06-18 13:54:45 +08:00
目测要安装啥包 topthink\xxx 包,现在好多功能都分开包了
abccccabc
2021-06-19 15:45:56 +08:00
楼主,转 go 语言呀。现在 php 的入门门槛越来越高了。
myd
2021-06-19 16:15:48 +08:00
建议弃坑,thinkphp6 文档错漏、bug 很多

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/784152

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX