尝试刷新令牌后,令牌被取消验证

2024-01-01

我将 Symfony 环境从 3.3 更新到 4.0。更新后,我的登录出现问题(数据库提供的用户)。当我提交登录表单时,我直接返回到登录表单,没有任何错误消息。当我使用无效凭据时,我收到了相应的错误消息。这是尝试登录后的日志。使用“in_memory”用户提供程序的登录正常。你需要更多信息?

[2017-12-06 13:57:05] security.INFO: User has been authenticated successfully. {"username":"***"} []
[2017-12-06 14:22:39] doctrine.DEBUG: "START TRANSACTION" [] []
[2017-12-06 13:57:05] security.DEBUG: Read existing security token from the session. {"key":"_security_secured_area","token_class":"Symfony\\Component\\Security\\Core\\Authentication\\Token\\UsernamePasswordToken"} []
[2017-12-06 13:57:05] doctrine.DEBUG: SELECT t0.username AS username_1, t0.password AS password_2, t0.email AS email_3, t0.email_new AS email_new_4, t0.first_name AS first_name_5, t0.last_name AS last_name_6, t0.is_active AS is_active_7, t0.email_confirmed AS email_confirmed_8, t0.shibboleth_state AS shibboleth_state_9, t0.shibboleth_hash AS shibboleth_hash_10, t0.shibboleth_persistent_id AS shibboleth_persistent_id_11, t0.confirmation_email_send AS confirmation_email_send_12, t0.last_login AS last_login_13, t0.expires AS expires_14, t0.session_id AS session_id_15, t0.id AS id_16, t0.hidden AS hidden_17, t0.deleted AS deleted_18, t0.created AS created_19, t0.modified AS modified_20, t0.sorting AS sorting_21, t0.salutation_id AS salutation_id_22, t0.creator_id AS creator_id_23, t0.modifier_id AS modifier_id_24 FROM User t0 WHERE t0.id = ? AND ((t0.deleted = 0)) [2] []
[2017-12-06 13:57:05] security.DEBUG: Token was deauthenticated after trying to refresh it. {"username":"user","provider":"Symfony\\Component\\Security\\Core\\User\\ChainUserProvider"} []
[2017-12-06 13:57:05] security.INFO: Populated the TokenStorage with an anonymous Token. [] []
[2017-12-06 13:57:05] security.DEBUG: Access denied, the user is not fully authenticated; redirecting to authentication entry point. {"exception":"[object] (Symfony\\Component\\Security\\Core\\Exception\\AccessDeniedException(code: 403): Access Denied. at /vendor/symfony/symfony/src/Symfony/Component/Security/Http/Firewall/AccessListener.php:68)"} []
[2017-12-06 13:57:05] security.DEBUG: Calling Authentication entry point. [] []

实体\用户:

class User extends EntitySuperclass implements AdvancedUserInterface, \Serializable
{
    /**
     * @ORM\Column(type="string")
     */
    private $username;

    /**
     *
     * @Assert\Length(max=4096,groups={"account_complete","account_password","user"})
     * @Assert\Length(min = 8,groups={"account_complete","account_password","user"}, minMessage="user.password_length")
     */
    private $plainPassword;

    /**
     * The below length depends on the "algorithm" you use for encoding
     * the password, but this works well with bcrypt.
     *
     * @ORM\Column(type="string", length=64)
     */
    private $password;

    /**
     * @ORM\Column(type="string", length=255)
     * @Assert\NotBlank(groups={"account_register","user"})
     * @Assert\Email(
     *      groups = {"account_register", "account","user"},
     *      strict = true,
     *      checkMX = true
     * )
     */
    private $email;

    /**
     * @ORM\Column(type="string", length=255)
     */
    private $emailNew = '';

    /**
     * @ORM\ManyToOne(targetEntity="Salutation")
     * 
     */
    private $salutation;

    /**
     * @ORM\Column(type="string")
     * @Assert\NotBlank(groups={"account_complete","user"})
     * @Assert\Regex(pattern = "/^[a-zA-ZäöüÄÖÜß0-9 ]+$/",groups={"account_complete","user"}, message="user.first_name.regex")
     */
    private $firstName;

    /**
     * @ORM\Column(type="string")
     * @Assert\NotBlank(groups={"account_complete","user"})
     * @Assert\Regex(pattern = "/^[a-zA-ZäöüÄÖÜß0-9 ]+$/",groups={"account_complete","user"}, message="user.last_name.regex")
     */
    private $lastName;

    /**
     * @ORM\Column(name="is_active", type="boolean")
     */
    private $isActive = false;

    /**
     * @ORM\Column(name="email_confirmed", type="boolean")
     */
    private $emailConfirmed = false;

    /**
     * @ORM\Column(type="integer")
     */
    private $shibbolethState = 0;

    /**
     * @ORM\Column(type="string")
     */
    private $shibbolethHash = '';

    /**
     * @ORM\Column(type="string")
     */
    private $shibbolethPersistentId = '';

    /**
     * @ORM\ManyToMany(targetEntity="UserGroup")
     * @ORM\JoinTable(name="User_UserGroup",
     *      joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")},
     *      inverseJoinColumns={@ORM\JoinColumn(name="group_id", referencedColumnName="id")}
     *      )
     */
    private $userGroups;

    /**
     * @ORM\Column(type="integer")
     */
    private $confirmationEmailSend;

    /**
     * @ORM\Column(type="integer")
     */
    private $lastLogin = 0;

    /**
     * @ORM\Column(type="integer")
     */
    protected $expires = 0;

    /**
     * @ORM\Column(type="string", length=255)
     */
    private $sessionId = '';

    /**
     * @ORM\ManyToMany(targetEntity="BankDetails", cascade={"persist"})
     * @ORM\JoinTable(name="User_BankDetails",
     *      joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")},
     *      inverseJoinColumns={@ORM\JoinColumn(name="bank_details_id", referencedColumnName="id")}
     * )
     * @Assert\Valid
     */
    private $bankDetails;

    /**
     * @ORM\ManyToMany(targetEntity="Address", cascade={"persist"})
     * @ORM\JoinTable(name="User_BillingAddress",
     *      joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")},
     *      inverseJoinColumns={@ORM\JoinColumn(name="billing_address_id", referencedColumnName="id")}
     * )
     * @Assert\Count(
     *      min = 1,
     *      minMessage = "user.billing_addresses.min",
     * )
     * @Assert\Valid
     */
    private $billingAddresses;

    public function __construct()
    {
        parent::__construct();
        $this->isActive = true;
        $this->confirmationEmailSend = 0;
        $this->userGroups = new ArrayCollection();
        $this->bankDetails = new ArrayCollection();
        $this->billingAddresses = new ArrayCollection();
        // may not be needed, see section on salt below
        // $this->salt = md5(uniqid(null, true));
    }

    /**
     * @ORM\PrePersist
     */
    public function prePersist()
    {
        $currentTimestamp = time();

        if($this->getConfirmationEmailSend() == NULL)
            $this->setConfirmationEmailSend(0);

   }

    public function getUsername()
    {
        //return $this->username;
        return $this->email;
    }

    public function getSalt()
    {
        // The bcrypt algorithm doesn't require a separate salt.
        return null;
    }

    public function getPassword()
    {
        return $this->password;
    }

    public function getRoles()
    {
        $roles = array();
        $userGroups = $this->getUserGroups();
        if(!empty($userGroups)) {
            foreach($userGroups as $userGroup) {
                $role = $userGroup->getRole();
                $roles[] = 'ROLE_'.strtoupper($role);
            }
        }
        return $roles;
    }

    public function isGranted($role)
    {
        return in_array($role, $this->getRoles());
    }

    public function eraseCredentials()
    {
    }

    public function isAccountNonExpired()
    {
        return true;
    }

    public function isAccountNonLocked()
    {
        return true;
    }

    public function isCredentialsNonExpired()
    {
        return true;
    }

    public function isEnabled()
    {
        return $this->isActive;
    }

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

    /** @see \Serializable::unserialize() */
    public function unserialize($serialized)
    {
        list (
            $this->id,
            $this->username,
            $this->password,
            $this->isActive,
            // see section on salt below
            // $this->salt
        ) = unserialize($serialized);
    }

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

        return $this;
    }

    public function getPlainPassword()
    {
        return $this->plainPassword;
    }

    public function setPlainPassword($password)
    {
        $this->plainPassword = $password;
    }

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

        return $this;
    }

    /**
     * Set email
     *
     * @param string $email
     *
     * @return User
     */
    public function setEmail($email)
    {
        $this->email = $email;
        $this->setUsername($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;
    }

    /**
     * Add userGroup
     *
     * @param \AppBundle\Entity\UserGroup $userGroup
     *
     * @return User
     */
    public function addUserGroup(\AppBundle\Entity\UserGroup $userGroup)
    {
        $this->userGroups[] = $userGroup;

        return $this;
    }

    /**
     * Remove userGroup
     *
     * @param \AppBundle\Entity\UserGroup $userGroup
     */
    public function removeUserGroup(\AppBundle\Entity\UserGroup $userGroup)
    {
        $this->userGroups->removeElement($userGroup);
    }

    /**
     * Get userGroups
     *
     * @return \Doctrine\Common\Collections\Collection
     */
    public function getUserGroups()
    {
        return $this->userGroups;
    }

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

        return $this;
    }

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

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

        return $this;
    }

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

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

        return $this;
    }

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

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

        return $this;
    }

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

    public function removeAllUserGroups() {
        $userGroups = $this->getUserGroups();
        foreach($userGroups as $userGroup) {
           $this->removeUserGroup($userGroup);
        }
    }

    public function hasUserGroup($userGroupId) {
        foreach($this->getUserGroups() as $userGroup) {
            if($userGroup->getId() == $userGroupId)
                return true;
        }
        return false;
    }

    /**
     * Set lastLogin
     *
     * @param integer $lastLogin
     *
     * @return User
     */
    public function setLastLogin($lastLogin)
    {
        $this->lastLogin = $lastLogin;

        return $this;
    }

    /**
     * Get lastLogin
     *
     * @return integer
     */
    public function getLastLogin()
    {
        return $this->lastLogin;
    }

    /**
     * Set confirmationEmailSend
     *
     * @param integer $confirmationEmailSend
     *
     * @return User
     */
    public function setConfirmationEmailSend($confirmationEmailSend)
    {
        $this->confirmationEmailSend = $confirmationEmailSend;

        return $this;
    }

    /**
     * Get confirmationEmailSend
     *
     * @return integer
     */
    public function getConfirmationEmailSend()
    {
        return $this->confirmationEmailSend;
    }

    /**
     * Set validTill
     *
     * @param integer $validTill
     *
     * @return User
     */
    public function setValidTill($validTill)
    {
        $this->validTill = $validTill;

        return $this;
    }

    /**
     * Get validTill
     *
     * @return integer
     */
    public function getValidTill()
    {
        return $this->validTill;
    }

    /**
     * Set shibbolethValid
     *
     * @param integer $shibbolethValid
     *
     * @return User
     */
    public function setShibbolethValid($shibbolethValid)
    {
        $this->shibbolethValid = $shibbolethValid;

        return $this;
    }

    /**
     * Get shibbolethValid
     *
     * @return integer
     */
    public function getShibbolethValid()
    {
        return $this->shibbolethValid;
    }

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

        return $this;
    }

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

    /**
     * Set shibbolethState
     *
     * @param integer $shibbolethState
     *
     * @return User
     */
    public function setShibbolethState($shibbolethState)
    {
        $this->shibbolethState = $shibbolethState;

        return $this;
    }

    /**
     * Get shibbolethState
     *
     * @return integer
     */
    public function getShibbolethState()
    {
        return $this->shibbolethState;
    }

    /**
     * Set expires
     *
     * @param integer $expires
     *
     * @return User
     */
    public function setExpires($expires)
    {
        $this->expires = $expires;

        return $this;
    }

    /**
     * Get expires
     *
     * @return integer
     */
    public function getExpires()
    {
        return $this->expires;
    }

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

        return $this;
    }

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

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

        return $this;
    }

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

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

        return $this;
    }

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

    /**
     * Set salutation
     *
     * @param \AppBundle\Entity\Salutation $salutation
     *
     * @return User
     */
    public function setSalutation(\AppBundle\Entity\Salutation $salutation = null)
    {
        $this->salutation = $salutation;

        return $this;
    }

    /**
     * Get salutation
     *
     * @return \AppBundle\Entity\Salutation
     */
    public function getSalutation()
    {
        return $this->salutation;
    }

    /**
     * Add bankDetail
     *
     * @param \AppBundle\Entity\BankDetails $bankDetail
     *
     * @return User
     */
    public function addBankDetail(\AppBundle\Entity\BankDetails $bankDetail)
    {
        $this->bankDetails[] = $bankDetail;

        return $this;
    }

    /**
     * Remove bankDetail
     *
     * @param \AppBundle\Entity\BankDetails $bankDetail
     */
    public function removeBankDetail(\AppBundle\Entity\BankDetails $bankDetail)
    {
        $this->bankDetails->removeElement($bankDetail);
    }

    /**
     * Get bankDetails
     *
     * @return \Doctrine\Common\Collections\Collection
     */
    public function getBankDetails()
    {
        return $this->bankDetails;
    }

    /**
     * Add billingAddress
     *
     * @param \AppBundle\Entity\Address $billingAddress
     *
     * @return User
     */
    public function addBillingAddress(\AppBundle\Entity\Address $billingAddress)
    {
        $this->billingAddresses[] = $billingAddress;

        return $this;
    }

    /**
     * Remove billingAddress
     *
     * @param \AppBundle\Entity\Address $billingAddress
     */
    public function removeBillingAddress(\AppBundle\Entity\Address $billingAddress)
    {
        $this->billingAddresses->removeElement($billingAddress);
    }

    /**
     * Set billingAddresses
     *
     * @param \AppBundle\Entity\Address $billingAddress
     *
     * @return User
     * 
     */
    public function setBillingAddresses(\AppBundle\Entity\Address $billingAddress)
    {
        if($this->billingAddresses !== NULL and $this->billingAddresses->contains($billingAddress)){
            return false;
        }
        $this->addBillingAddress($billingAddress);
        return $this;
    }

    /**
     * Set one billingAddresses
     *
     * @param \AppBundle\Entity\Address $billingAddress
     *
     * @return User
     * 
     */
    public function setOneBillingAddresses(\AppBundle\Entity\Address $billingAddress)
    {
        $this->billingAddresses = $billingAddress;

        return $this;
    }

    /**
     * Set one billingAddresses
     *
     * @param \AppBundle\Entity\Address $billingAddress
     *
     * @return User
     * 
     */
    public function unsetBillingAddresses()
    {
        $this->billingAddresses = new ArrayCollection();

        return $this;
    }

    /**
     * Get billingAddresses
     *
     * @return \Doctrine\Common\Collections\Collection
     */
    public function getBillingAddresses()
    {
        return $this->billingAddresses;
    }
}

配置/安全.yml

providers:
        chain_provider:
            chain:
                providers: [in_memory, database_user]
        in_memory:
            memory:
                users:
                    admin:
                        password: ***
                        roles: 'ROLE_ADMIN'
        database_user:
            entity:
                class: AppBundle:User

    firewalls:
        # disables authentication for assets and the profiler, adapt it according to your needs
        dev:
            pattern: ^/(_(profiler|wdt)|css|images|js)/
            security: false
        secured_area:
            # pattern: match to pages
            anonymous: ~
            pattern:    ^/
            access_denied_handler: AppBundle\Security\AccessDeniedHandler
            provider: chain_provider
            form_login:
                login_path: /login
                check_path: /login_check
                default_target_path: account
                # Configuring CSRF protection
                csrf_parameter: _csrf_security_token
                csrf_token_id: a_private_string
                success_handler: AppBundle\Handler\LoginSuccessHandler
            logout:
                path: /logout
                target: /login

    access_control:
        ...

    role_hierarchy:
        ...

    encoders:
        AppBundle\Entity\User:
            algorithm: bcrypt
        Symfony\Component\Security\Core\User\User:
            plaintext

从 Symfony 4.0 开始,logout_on_user_change被设定为true。这意味着如果更改,用户将被注销。

你应该实施Symfony\Component\Security\Core\User\EquatableInterface并添加isEqualTo method:

class User implements EquatableInterface
{
    public function isEqualTo(UserInterface $user)
    {
        if ($this->password !== $user->getPassword()) {
            return false;
        }

        if ($this->salt !== $user->getSalt()) {
            return false;
        }

        if ($this->username !== $user->getUsername()) {
            return false;
        }

        return true;
    }
}

变更日志

https://github.com/symfony/security-bundle/blob/master/CHANGELOG.md https://github.com/symfony/security-bundle/blob/master/CHANGELOG.md

4.1.0

The logout_on_user_change防火墙选项已弃用,并将在 5.0 中删除。

4.0.0

防火墙选项logout_on_user_change现在始终为 true,如果用户在请求之间发生更改,则会触发注销

3.4.0

Added logout_on_user_change到防火墙选项。当用户更改时,此配置项将触发注销。应设置为 true 以避免配置中的弃用。

在撰写此答案时尚未记录该选项:https://github.com/symfony/symfony-docs/issues/8428 https://github.com/symfony/symfony-docs/issues/8428,但现在是:https://symfony.com/doc/4.4/reference/configuration/security.html#logout-on-user-change https://symfony.com/doc/4.4/reference/configuration/security.html#logout-on-user-change

关于更新到新的主要版本的旁注

如果您想升级到新的主要版本,请始终先更新到最新的次要版本。这意味着先更新到 2.8,然后再更新到 3.0,并先更新到 3.4,然后再更新到 4.0。看Symfony 4:编写您的应用程序 http://fabien.potencier.org/symfony4-compose-applications.html作者:法比安·波坦西耶。

Symfony 3.0 = Symfony 2.8 - 已弃用的功能

(..)

Symfony 4.0 = Symfony 3.4 - 已弃用的功能 + 新的开发方式 应用

如果您已经使用最新的次要版本,则更新到新的主要版本会容易得多,因为您可以看到所有弃用通知。

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

尝试刷新令牌后,令牌被取消验证 的相关文章

随机推荐

  • 如何为Alamofire请求功能编写单元测试?

    我有一个项目 我正在发送 GET 请求以从服务器获取数据 为此我使用 Alamofire 和 SwiftyJSON 例如 我有文件 链接 请求 和我的视图控制器 链接 swift var getAllData String return h
  • 集合上最小、最大的时间复杂度

    min max 的时间复杂度为 O N 因为它们必须循环给定的列表 字符串并检查每个索引以找到最小值 最大值 但我想知道如果在集合上使用 min max 的时间复杂度是多少 例如 s 1 2 3 4 s is a set 使用最小 最大我们
  • 在Python(最好是py3k)上使用sscanf?

    我见过这个问题 https stackoverflow com q 2175080 309483 但我遇到了问题顶级解决方案 https hkn eecs berkeley edu dyoo python scanf 例如 gt gt gt
  • 如何在 Laravel 中将变量传递给服务提供者?

    我想在侧边栏中生成一个动态菜单并与 Laravel 5 1 中的所有视图共享 like Marks Module Langosh Topic Content 1 Content 2 Nitzsche Topic Content 3 Rolf
  • 我怎样才能制作一个水平选择器?

    我想为我的应用程序制作一个水平选择器 但我对这一切还很陌生 有人可以提供一个易于遵循的指南来指导我如何做到这一点吗 最好的方法是伪造你自己的使用UIScrollView启用分页 实际上相当简单 将滚动视图与您自己的自定义图形视图重叠
  • 用最顶层的括号分割字符串

    我有一个如下所示的字符串 1 2 3 我想对其进行正则表达式以获得以下数组 1 2 3 另一个例子 asd dfg asd bdfg asdf asd gt asd dfg asd bdfg asdf asd 我试图搜索如何执行这样的正则表
  • Javascript Uncaught Reference 错误 函数未定义

    检查小提琴 http jsfiddle net vSHQD 查看故障发生情况 当我将数据 即使我将其留空 添加到文本框并尝试单击 添加 时 它不会执行任何操作 打开 Chrome 和 Firefox 控制台都会给我同样的错误 它说 chan
  • 如何在android中设置适合所有屏幕的壁纸,无需拉伸、缩放和裁剪

    注意 请不要将其标记为重复 因为几年前就曾提出过同样的问题 这在当时可能有效 但现在不起作用 使用下面的代码 我的壁纸要么拉伸到屏幕 2 和 3 要么根据设备在屏幕底部裁剪 以下代码适用于三星设备 但不适用于其他制造商的设备 我还尝试使用以
  • symfony2 orm 学说中与额外字段的多对多关系

    嗨 我有与这里相同的问题 与额外字段的多对多自关系 https stackoverflow com questions 9134856 many to many self relation with extra fields但我找不到答案
  • 如何在 Fragment 中使用 SharedPreferences 保存数据

    我在永久保存数据时遇到问题 它应该很简单 我将数据发送到另一个片段并且它工作得很好 但是 我不知道如何保存数据 我尝试了一些事情 但我想知道你是否可以帮助我 在我的代码中 我通过按下按钮将数据发送到另一个片段 这是代码 包 com exam
  • 如何删除 Flex 4 TextArea 组件的边框(spark 主题光环)

    使用 Flex 3 SDK 您只需将 borderThickness 样式设置为 0 或将 borderStyle 设置为 none 对于 Flex 4 SDK 和 Spark 主题 这没有效果 尝试类似的方法 borderVisible
  • 删除目录中的内容时出错 - Domain=NSCocoaErrorDomain Code=4 | Domain=NSPOSIXErrorDomain Code=2“没有这样的文件或目录”

    运行下面的代码时如何修复以下错误 我已经在 SO 中搜索过 但找不到 Swift 3 的任何内容 Delete all files in given directory let path NSSearchPathForDirectories
  • 在 Sitefinity API 中为文件系统上已存在的文档创建文件

    我正在使用 Sitefinity 作为 Visual Studio 2012 中的解决方案 我使用的是 64 位计算机 我刚刚安装了 Windows Identity Manager 因为在此之前我收到了另一个错误 这与未安装该错误有关 现
  • 每页都有 Jekyll 分页

    据我们所知 Jekyll 默认分页仅支持 index html 我想创建 blog html 包含分页 有什么解决办法吗 如果您创建一个名为 blog并放置一个index html文件里面 然后你可以添加一个设置 config yml说的是
  • PHPUnit - 当 dataProvider 返回空数组时不要失败

    我有一个 PHPUnit 测试 它使用 dataProvider 数据提供者检查文件系统中的某些文件 但是 我在不同的环境中使用此测试 这意味着文件可能不存在 这意味着 dataProvider 没有找到任何内容 并且测试未执行 这会导致测
  • 将多维 PHP 数组传递给 javascript

    我有一个数组 my array 看起来像 array 2 25 gt int 10 30 gt int 8 我想将它分配给一个 javascript 数组 但我很难做到这一点 有什么建议么 编辑 起初 我以为我可以像字符串一样分配它 但这不
  • 高效的最长公共子序列算法库?

    我正在寻找一种 空间 高效的 LCS 算法实现 以便在 C 程序中使用 输入是两个随机访问整数序列 我目前正在使用关于 LCS 的维基百科页面上的动态编程方法 然而 这在内存和时间上有 O mn 的行为 并且对于较大的输入来说会因为内存不足
  • ZendFramework 2 中的控制器特定布局

    我的 zendframework 2 应用程序中有一个模块 其中包含两个控制器 我想为控制器的其中一个操作设置不同的布局 有没有办法在模块配置文件中设置它 P s 我只是尝试使用以下命令将其设置在控制器的 CONSTRUCT 方法内 但它不
  • 在 Material UI 中,我们何时使用 Input 与 TextField 来构建表单?

    也许这只是一个基本问题 但到目前为止还没有找到任何合理的解释 我是 React 的初学者 最近正在使用 Material UI 我不太清楚何时使用输入和何时使用输入Textfield用于构建表单 看文档感觉是TextField是什么的超集I
  • 尝试刷新令牌后,令牌被取消验证

    我将 Symfony 环境从 3 3 更新到 4 0 更新后 我的登录出现问题 数据库提供的用户 当我提交登录表单时 我直接返回到登录表单 没有任何错误消息 当我使用无效凭据时 我收到了相应的错误消息 这是尝试登录后的日志 使用 in me