问题描述
我遇到了symfony的错误,我不得不重新安装供应商文件夹,此后我遇到了无法修复的错误。
Argument 3 passed to FOS\UserBundle\Doctrine\UserManager::__construct() must be an instance of Doctrine\Common\Persistence\ObjectManager,instance of Doctrine\ORM\EntityManager given,called in C:\wamp64\www\brouwers\var\cache\dev\ContainerMmxuCtr\srcApp_KernelDevDebugContainer.PHP on line 1664
我尝试在composer.json上添加:“ doctrine / common”:“ ^ 2.13”
该错误仍然存在...
我不知道该如何解决。
有人可以帮助我吗?
我的composer.json
{
"type": "project","license": "proprietary","require": {
"PHP": "^7.1.3","ext-ctype": "*","ext-iconv": "*","friendsofsymfony/user-bundle": "^2.1","a2lix/translation-form-bundle": "^3.0","excelwebzone/recaptcha-bundle": "^1.5","doctrine/common":"^2.13","karser/karser-recaptcha3-bundle": "^0.1.8","knplabs/doctrine-behaviors": "^2.0","knplabs/knp-paginator-bundle": "^5.2","sensio/framework-extra-bundle": "^5.1","stof/doctrine-extensions-bundle": "^1.4","symfony/apache-pack": "^1.0","symfony/asset": "4.4.*","symfony/console": "4.4.*","symfony/dotenv": "4.4.*","symfony/expression-language": "4.4.*","symfony/flex": "^1.3.1","symfony/form": "4.4.*","symfony/framework-bundle": "4.4.*","symfony/http-client": "4.4.*","symfony/intl": "4.4.*","symfony/mailer": "4.4.*","symfony/monolog-bundle": "^3.1","symfony/orm-pack": "*","symfony/process": "4.4.*","symfony/security-bundle": "4.4.*","symfony/serializer-pack": "*","symfony/swiftmailer-bundle": "^3.4","symfony/translation": "4.4.*","symfony/twig-pack": "*","symfony/validator": "4.4.*","symfony/web-link": "4.4.*","symfony/webpack-encore-bundle": "^1.7","symfony/yaml": "4.4.*","twig/extensions": "^1.5","twig/extra-bundle": "^3.0","twig/twig": "^2.0"
},"require-dev": {
"symfony/debug-pack": "*","symfony/maker-bundle": "^1.0","symfony/profiler-pack": "*","symfony/test-pack": "*"
},"config": {
"preferred-install": {
"*": "dist"
},"sort-packages": true
},"autoload": {
"psr-4": {
"App\\": "src/"
}
},"autoload-dev": {
"psr-4": {
"App\\Tests\\": "tests/"
}
},"replace": {
"paragonie/random_compat": "2.*","symfony/polyfill-ctype": "*","symfony/polyfill-iconv": "*","symfony/polyfill-PHP71": "*","symfony/polyfill-PHP70": "*","symfony/polyfill-PHP56": "*"
},"scripts": {
"auto-scripts": {
"cache:clear": "symfony-cmd","assets:install %PUBLIC_DIR%": "symfony-cmd"
},"post-install-cmd": [
"@auto-scripts"
],"post-update-cmd": [
"@auto-scripts"
]
},"conflict": {
"symfony/symfony": "*"
},"extra": {
"symfony": {
"allow-contrib": false,"require": "4.4.*"
}
}
}
实体用户:
<?PHP
// src/Entity/User.PHP
namespace App\Entity;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use FOS\UserBundle\Model\User as BaseUser;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\HttpFoundation\File\UploadedFile;
/**
* @ORM\Entity
* @ORM\Table(name="fos_user")
*/
class User extends BaseUser
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @Assert\File(maxSize="2048k")
* @Assert\Image(mimeTypesMessage="Please upload a valid image.")
*/
protected $profilePictureFile;
// for temporary storage
private $tempProfilePicturePath;
/**
* @ORM\Column(type="string",length=255,nullable=true)
*/
protected $profilePicturePath;
public function __construct()
{
parent::__construct();
// your own logic
$this->roles = array('ROLE_ADMIN');
$this->enabled = true;
}
public function getId(): ?int
{
return $this->id;
}
/**
* Asks whether the user is granted a particular role
*
* @return boolean
*/
public function isGranted($role)
{
return in_array($role,$this->getRoles());
}
/**
* Sets the file used for profile picture uploads
*
* @param UploadedFile $file
* @return object
*/
public function setProfilePictureFile(UploadedFile $file = null) {
// set the value of the holder
$this->profilePictureFile = $file;
// check if we have an old image path
if (isset($this->profilePicturePath)) {
// store the old name to delete after the update
$this->tempProfilePicturePath = $this->profilePicturePath;
$this->profilePicturePath = null;
} else {
$this->profilePicturePath = 'initial';
}
return $this;
}
/**
* Get the file used for profile picture uploads
*
* @return UploadedFile
*/
public function getProfilePictureFile() {
return $this->profilePictureFile;
}
/**
* Set profilePicturePath
*
* @param string $profilePicturePath
* @return User
*/
public function setProfilePicturePath($profilePicturePath)
{
$this->profilePicturePath = $profilePicturePath;
return $this;
}
/**
* Get profilePicturePath
*
* @return string
*/
public function getProfilePicturePath()
{
return $this->profilePicturePath;
}
/**
* Get the absolute path of the profilePicturePath
*/
public function getProfilePictureAbsolutePath() {
return null === $this->profilePicturePath
? null
: $this->getUploadRootDir().'/'.$this->profilePicturePath;
}
/**
* Get root directory for file uploads
*
* @return string
*/
protected function getUploadRootDir($type='profilePicture') {
// the absolute directory path where uploaded
// documents should be saved
return __DIR__.'/../../public/images/'.$this->getUploadDir($type);
}
/**
* Specifies where in the /web directory profile pic uploads are stored
*
* @return string
*/
protected function getUploadDir($type='profilePicture') {
// the type param is to change these methods at a later date for more file uploads
// get rid of the __DIR__ so it doesn't screw up
// when displaying uploaded doc/image in the view.
return 'profilePicture';
}
/**
* Get the web path for the user
*
* @return string
*/
public function getWebProfilePicturePath() {
return '/'.$this->getUploadDir().'/'.$this->getProfilePicturePath();
}
/**
* @ORM\PrePersist()
* @ORM\PreUpdate()
*/
public function preUploadProfilePicture() {
if (null !== $this->getProfilePictureFile()) {
// a file was uploaded
// generate a unique filename
$filename = md5(random_bytes(10));
$this->setProfilePicturePath($filename.'.'.$this->getProfilePictureFile()->guessExtension());
}
}
/**
* @ORM\PostPersist()
* @ORM\PostUpdate()
*
* Upload the profile picture
*
* @return mixed
*/
public function uploadProfilePicture() {
// check there is a profile pic to upload
if ($this->getProfilePictureFile() === null) {
return;
}
// if there is an error when moving the file,an exception will
// be automatically thrown by move(). This will properly prevent
// the entity from being persisted to the database on error
$this->getProfilePictureFile()->move($this->getUploadRootDir(),$this->getProfilePicturePath());
// check if we have an old image
if (isset($this->tempProfilePicturePath) && file_exists($this->getUploadRootDir().'/'.$this->tempProfilePicturePath)) {
// delete the old image
unlink($this->getUploadRootDir().'/'.$this->tempProfilePicturePath);
// clear the temp image path
$this->tempProfilePicturePath = null;
}
$this->profilePictureFile = null;
}
/**
* @ORM\PostRemove()
*/
public function removeProfilePictureFile()
{
if ($file = $this->getProfilePictureAbsolutePath() && file_exists($this->getProfilePictureAbsolutePath())) {
unlink($file);
}
}
}
fos_user.yaml
fos_user:
db_driver: orm # other valid values are 'mongodb' and 'couchdb'
firewall_name: main
user_class: App\Entity\User
from_email:
address: "bastien@no.com"
sender_name: "bastien@no.com"
非常感谢
解决方法
FOSUserBundle自1月5日起至今没有任何贡献。我们将其丢弃在我们公司中,是因为它与Symfony 4造成了很多麻烦,因为它似乎与它不兼容。
Symfony的文档涵盖了您需要了解和要做的所有事情,因此,我将从此处开始并自己实施身份验证。 Symfony 4几乎可以满足您的所有需求。
以下是官方文档的链接:https://symfony.com/doc/4.4/security/form_login_setup.html
另一种方法是搜索与Symfony 4兼容的捆绑软件中的分叉,然后使用该分叉或自己创建一个。