Symfony 登录身份验证返回错误:在非对象上调用成员函数 toArray()

2023-12-28

我正在开发一个使用 symfony 2.5 构建的网站,要求是每个用户只需要拥有一个角色(用户不能拥有超过 1 个角色),因此在用户名和密码所在的用户表中还有另一列名字role其中包含ROLE_ADMIN对于管理员和ROLE_STAFF对于公司员工,因此在验证我的getRoles功能如下所示我可以以管理员身份正常登录

public function getRoles()
{
    return array('ROLE_ADMIN');
}

因为我无法对角色进行硬编码,并且需要从数据库中获取它,所以如果我更改此设置以从role的列user table

public function getRoles()
{
    return $this->getRole();
}
// getter for $role 
public function getRole()
{
    return $this->role->toArray();
}

我收到错误

错误:在非对象上调用成员函数 toArray()

如果有人可以帮助我解决这个问题,我将非常感激,请注意,我不需要角色的多对多关系,每个用户只需要一个角色,并且希望避免创建另一个实体,例如烹饪书示例。

如果有帮助的话这是我的全部User Entity

<?php

namespace ClickTeck\UserBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Security\Core\User\AdvancedUserInterface;
use Doctrine\Common\Collections\ArrayCollection;


/**
 * User
 */

class User implements AdvancedUserInterface, \Serializable
{
    /**
     * @var integer
     */
    private $id;

    /**
     * @var string
     */
    private $username;

    /**
     * @var string
     */
    private $email;

    /**
     * @var string
     */
    private $password;

    /**
     * @var string
     */
    private $salt;

    /**
     * @var boolean
     */
    private $isActive;

    /**
     * @var string
     */
    private $role;



    public function __construct()
    {
        $this->isActive = true;
        $this->salt = md5(uniqid(null, true));
        $this->role = new ArrayCollection();
    }

    public function isAccountNonExpired()
    {
        return true;
    }

    public function isAccountNonLocked()
    {
        return true;
    }

    public function isCredentialsNonExpired()
    {
        return true;
    }

    public function isEnabled()
    {
        return $this->isActive;
    }
    /**
     * @inheritDoc
     */
    public function getSalt()
    {
        return $this->salt;
    }

    public function setSalt($salt)
    {
        $this->salt = $salt;

        return $this;
    }
    /**
     * @inheritDoc
     */
    public function getRoles()
    {
        //return $this->role;
        return $this->getRole();

        //return array('ROLE_ADMIN');
    }

    /**
     * @inheritDoc
     */
    public function eraseCredentials()
    {
    }

    /**
     * @see \Serializable::serialize()
     */
    public function serialize()
    {
        return serialize(array(
                $this->id,
                $this->username,
                $this->password,
                $this->salt,
            ));
    }

    /**
     * @see \Serializable::unserialize()
     */
    public function unserialize($serialized)
    {
        list (
            $this->id,
            $this->username,
            $this->password,
            $this->salt
            ) = unserialize($serialized);
    }
    /**
     * Get id
     *
     * @return integer
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Set username
     *
     * @param string $username
     * @return User
     */
    public function setUsername($username)
    {
        $this->username = $username;

        return $this;
    }

    /**
     * Get username
     *
     * @return string
     */
    public function getUsername()
    {
        return $this->username;
    }

    /**
     * Set password
     *
     * @param string $password
     * @return User
     */
    public function setPassword($password)
    {
        $this->password = $password;

        return $this;
    }

    /**
     * Get password
     *
     * @return string
     */
    public function getPassword()
    {
        return $this->password;
    }

    /**
     * Set email
     *
     * @param string $email
     * @return User
     */
    public function setEmail($email)
    {
        $this->email = $email;

        return $this;
    }

    /**
     * Get email
     *
     * @return string
     */
    public function getEmail()
    {
        return $this->email;
    }

    /**
     * Set isActive
     *
     * @param boolean $isActive
     * @return User
     */
    public function setIsActive($isActive)
    {
        $this->isActive = $isActive;

        return $this;
    }

    /**
     * Get isActive
     *
     * @return boolean
     */
    public function getIsActive()
    {
        return $this->isActive;
    }

    /**
     * Set role
     *
     * @param string $role
     * @return User
     */
    public function setRole($role)
    {
        $this->role = $role;

        return $this;
    }

    /**
     * Get role
     *
     * @return string
     */
    public function getRole()
    {

        return $this->role->toArray();


    }
}

我还需要提到假设如果我不将角色转换为数组我会收到错误

可捕获的致命错误:传递给 Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken::__construct() 的参数 4 必须是数组类型,给定字符串,


你不能使用toArray()非对象变量上的方法。这是PHP。不存在由所有原始类型扩展的通用对象。基元不是对象。

你的变量$role如您的实体中所述string类型。如果你想用这个变量创建数组,你可以调用:

array($this->role);

但正如 PHPDoc 中所描述的方法public function getRole()你想检索字符串。所以你不需要数组。刚回来$this->role.

实施UserInterface您需要返回用户的所有角色的数组。你可以直接返回array($this->role)在你的getRoles() method:

public function getRoles()
{
    return array($this->role);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Symfony 登录身份验证返回错误:在非对象上调用成员函数 toArray() 的相关文章

  • HTML 表单 POST 到 PHP 页面 [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 好的 我创
  • 基于 PHP 的 CSV 编辑器? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有谁知道用 PHP 编写的在线 CSV 编辑器允许用户打开 编辑和保存给定的 CSV 文件 我能找到的只
  • 如何在 Laravel 5.5 中编辑“页面因不活动而已过期”的视图

    在 Laravel 5 5 中 当您使用 CSRF 保护 默认情况下 并且在长时间不活动后发送发布请求时 您将收到此错误页面 屏幕截图 我对此错误表示同意 但是 我需要更改此错误的视图 文本以确保与我的应用程序风格和语言相匹配 关于如何编辑
  • 为什么我应该使用 $_GET 和 $_POST 而不是 $_REQUEST? [复制]

    这个问题在这里已经有答案了 除此之外 REQUEST从 cookie 读取 有什么理由我应该使用 GET and POST代替 REQUEST 这样做的理论和实践理由是什么 当我只想让用户的某些数据返回某些数据时 我使用 REQUEST 当
  • 如何在 PHP 中正确分割路径

    执行以下操作的最佳方法是什么 我通过 AJAX 请求获取路径 e g dir1 dir2 dir3 dir4 我需要在我的网页上这样展示它 dir1 gt gt dir2 gt gt dir3 gt gt dir4 它们每个都是 html
  • 配置 .htaccess 以在 PHP 框架 (Silex) 上工作

    我的 Apache2 本地主机 linux 上有一个工作路径 http localhost lab silex web index php hello name 我想成为 http localhost lab silex hello nam
  • 如何在javascript中使用自动递增id?

  • Propel Query 中的动态表名称

    我想知道您是否可以使 propel 查询的表名称动态化 有点像变量 一个例子类似于 DynamicVar Query create 我让它在 ifs 中工作 就像下面的例子一样 但如果更动态地制作 可以删除相当多的行 这些表的设置都是相同的
  • 需要 mysqli_fetch_all 的替代方案

    我有一个 php mysqli 代码 可以找到一个我的本地服务器 但是在我的服务器上使用它时 我得到了一个 Fatal error Call to undefined function mysqli fetch all in home3 t
  • URL 重写帮助

    RewriteEngine on RewriteCond REQUEST URI index php RewriteRule index php q 1 L 这应该将任何 url 重写为 index php q url 并且它可以工作 反正
  • 疯狂的 crond 行为。不断使 bash 进程失效

    我有一个看起来像这样的 crontab SHELL bin bash PATH sbin bin usr sbin usr bin MAILTO root HOME 0 59 var www html private fivemin zda
  • 将秒转换为天、小时、分钟和秒

    我想转换一个变量 uptime这是秒 分为天 小时 分钟和秒 Example uptime 1640467 结果应该是 18 days 23 hours 41 minutes 这可以通过以下方式实现DateTime http php net
  • 如何通过 Doctrine2 查询构建器获取随机行?

    到目前为止我有 qb1 this gt getEntityManager gt createQueryBuilder qb1 gt select s gt from My Entity Song s gt where s id lt gt
  • 翻译即时消息

    如果表单成功 我正在尝试翻译我发送的即时消息 正常的请求是这样的 request gt getSession gt getFlashBag gt add notice Your E Mail has been sent 所以我尝试使用以下变
  • 避免 SQLite3 中的 SQL 注入

    我正在尝试找出一种避免 SQL 注入的好简单方法 到目前为止我只能提出两个想法 对用户输入进行 Base64 编码 其实不想这样做 使用正则表达式删除不需要的字符 目前正在使用这个 不确定是否100 安全 这是我当前的代码
  • 从外部 bash 设置环境变量

    我试图使用 PHP 从命令行 设置 bash 环境变量 但没有成功 buff array buff VARTESTKEY VARTESTVALUE buff export VARTESTKEY file put contents scrip
  • PHP 中的嵌套 JSON 输出

    我正在为 iOS 应用程序构建 API 并尝试将 mySQL 数据转换为 JSON 字符串进行处理 所需的输出将需要顶级订单详细信息 例如客户名称和地址 然后是订购的产品子数组 我需要的两个表中有相当多的字段 我希望拥有所有字段 我已经构建
  • 如何显示不同页眉的页面? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我正在为我的学校项目开发网站 但我遇到了一个问题 我在每个页面上显示一个标题 我的标题之一包含登录表单 另一标题包含用户名 搜索栏等 问题是
  • 处理查询字符串参数时 Codeigniter 缓存问题

    问候 我正在编写一个 CI Web 应用程序 它实现标准文件缓存功能 如下所示 this gt output gt cache n 我使用了段和查询字符串参数的组合 因此似乎遇到了问题 我在用例和输出类代码中看到的是 缓存仅基于段 像这样
  • PHP 中的 Zip 流

    我有一个 PHP 脚本 可以动态创建 zip 文件并强制浏览器下载该 zip 文件 问题是 我可以直接将zip文件写入连接到用户浏览器的输出流 而不是先将其保存为服务器上的真实文件 然后发送文件吗 提前致谢 如果您的 Web 服务器运行的是

随机推荐

  • Winform 消息框中可点击的 URL?

    我想在消息框中显示帮助链接 默认情况下 文本显示为不可选择的字符串 一种选择是在消息框中显示 url 以及一条消息 并提供帮助按钮 将您带到该 url MessageBox Show test message caption Message
  • 如何使用 CSS 将跨度更改为看起来像 pre?

    是否可以更改 span 标签 或 div 将其内容预格式化为 pre 标签只使用 CSS 吗 看着那 这W3C CSS2 1 默认样式表 https www w3 org TR CSS21 sample html or the CSS2 2
  • AJAX向WebApi传递多个参数

    AJAX 请求 ajax url url dataType json type Post data token 4 feed id 0 message Hello World userId 4 服务器端 Web API HttpPost p
  • 使用外部框架构建 Objective-C 应用程序

    我正在整合growl http growl info documentation developer implementing growl php lang cocoa进入我的 Objective C 应用程序 但是 如果我构建并运行我的应
  • C、硬件抽象层中“extern”类型的变量

    我正在研究硬件抽象层 该 HAL 的目的是在 Linux 驱动程序和 MCU 驱动程序之间轻松切换 我正在研究SPI接口 下面是 打开 SPI接口的HAL函数的签名 哈尔 spi h spi handle t spi open spi po
  • 将多个通用接口传递给一个方法

    我试图将多个通用接口作为参数传递给我的类之一的构造函数 以下代码无法编译 public interface IPosterGenerator
  • 如何使用Gradle将Android配置注入到每个子项目中?

    而不是在每个子项目中复制 android 配置块 android compileSdkVersion 19 buildToolsVersion 19 0 0 defaultConfig minSdkVersion 9 targetSdkVe
  • 为什么使用“set var = value”获取脚本会破坏 $@?

    我正在尝试在 Centos 虚拟机上配置自动注销 我注意到 如果我在 etc profile d autologout sh 创建一个文件 仅set autologout 30在文件中 然后它会中断为任何源自 etc profile 的脚本
  • 如何通过拖动来调整 PyQt 小部件的大小?

    我有一个 QScrollArea 其中包含一个带有 QVBoxLayout 的小部件 该布局内还有其他几个小部件 我希望用户能够拖动这些小部件的下边框以在垂直方向上调整它们的大小 当它们调整大小时 我不希望它们从滚动区域中的其他小部件 窃取
  • 使用 GDI+ 将 24 bpp 转换为 4 bpp

    我的程序当前采用 4 bpp 每像素位数 TIFF 作为位图 将其转换为图形 添加一些文本字符串 然后再次将其保存为 TIFF 文件 默认情况下 输出 Bitmap Save TIFF 文件似乎为 24 bpp 无论输入如何 并且比原始 T
  • Snowflake服务器的规格是什么?

    当谈到集群大小时 文档指出 例如 XS 集群由 1 台服务器组成 但我一直在寻找服务器规范 但似乎找不到有关此主题的任何文档 对于 AWS Snowflake 如果您在 Chrome F12 中打开浏览器控制台并在普通的 Snowflake
  • 如何安装“Visual studio emulator for android”模拟器的证书?

    我正在研究一个Xamarin 表单需要打电话的httpclient使用公司的内部 https REST api 不幸的是 它返回此错误 Javax Net Ssl SSLHandshakeException java security ce
  • 使用 jQuery 删除所有数据表

    所以 我将数据表与 jQuery 一起使用 但我有点困惑为什么这不起作用 我的 HTML 看起来像这样 table border 1 class display partitionDisplay caption Partitions cap
  • process.waitFor() 永远不会返回

    Process process Runtime getRuntime exec tasklist BufferedReader reader new BufferedReader new InputStreamReader process
  • 使用 JAVA 将希伯来语写入 mySql

    我有一个小的 Java 方法 可以将短消息插入 MySQL 数据库 该表的默认排序规则是utf8 unicode ci java代码是 private void insertMessageToDataBase String lRoom St
  • 这个登录逻辑是通过RESTful调用声音实现的吗?

    我不是在谈论对 RESTful API 的调用进行身份验证 我是在谈论通过 RESTful API 为用户创建登录逻辑 当用户访问我网站的任何页面时 servlet filter将拦截请求并检查是否有必要authentication inf
  • 在asp.net mvc视图中将字符串显示为html

    我有一个控制器 它生成一个包含 html 标记的字符串 当它显示在视图上时 它显示为包含所有标签的简单字符串 我尝试使用 Html 助手进行编码 解码以正确显示它 但它不起作用 string str a href Home Profile
  • numpy.loadtxt 不读取复数文件

    我正在尝试读取具有以下形式的复数的文件 data dat 1 5795219122457646E 11 3 852906516379872E 15i 3 5949335665378405E 12 1 626143709108086E 15i
  • 手风琴内的 flexslider 行为问题

    我有一个测试页 http bellotaestudio com test test html更好地解释我的问题 我的列表中有几个项目 它们是测试页上的图像 当我点击其中一个时 相应的幻灯片 使用flexslider 向下滑动 问题在于 在页
  • Symfony 登录身份验证返回错误:在非对象上调用成员函数 toArray()

    我正在开发一个使用 symfony 2 5 构建的网站 要求是每个用户只需要拥有一个角色 用户不能拥有超过 1 个角色 因此在用户名和密码所在的用户表中还有另一列名字role其中包含ROLE ADMIN对于管理员和ROLE STAFF对于公