symfony 相关问题

Symfony既指用于构建Web应用程序的PHP框架,也指构建框架的一组组件。此标记指的是当前支持的主要版本2.x,3.x和4.x.或者,您可以使用相应的标记指定确切的版本。此标记不应用于有关Symfony 1.x的问题。请改用Symfony1标签。

Symfony 会话(独立)cookiename

我独立使用 Symfony http 基础(也就是说,我在非 symfony 项目中安装了带有 Composer 的 http-foundation 包)。我想更改会话 cookie 的名称。什么...

回答 2 投票 0

“getResults()”在教义查询中返回什么类型的对象

当我使用 find(id) 执行查询时,它工作正常。 但是当我使用 createQuery 方法时 select u from User u where u.id = 1 然后我得到错误,它是一个数组。 所以我想知道是否可以...

回答 1 投票 0

在 symfony 7 中提交后如何更改变量

我在验证某些条件后单击提交按钮后尝试更改变量。 我使用普通的 html 表单而不是 symfony 表单 idk 如果有什么区别的话。 控制器: #[柔...

回答 1 投票 0

如何将 Doctrine 验证挂接到 EasyAdmin

我了解如何为 Doctrine 3 实体添加验证,但据我所知,EasyAdmin 应该将该验证显示为其表单的一部分。目前它只是抛出异常......

回答 1 投票 0

Symfony:如何在注销后显示成功消息

在Symfony中,用户成功注销后,如何显示“您已成功注销”之类的成功消息?

回答 3 投票 0

尝试将 Symfony 邮件程序与 Gmail 一起使用

尝试在我的 Symfony 5.1 应用程序上使用带有 Gmail 的 Symfony 邮件程序。 邮件程序.yaml: 框架: 邮寄者: dsn: '%env(MAILER_DSN)%' .env: MAILER_DSN=gmail+smtp://[email protected]:mypassword@localh...

回答 5 投票 0

Symfony 6 认证

大家早上好 请我阻止身份验证。调试日志: 我的调试日志 这是我的实体代码 类 User 实现 UserInterface, \Serializable,PasswordAuthenticatedUserInterface,

回答 1 投票 0

升级时/升级后 symfony 4 到 5 缓存错误

我的问题:将 symfony 4.4 升级到 5.0 时出现缓存错误(4.4 上的缓存清除工作) php : 升级时为 7.2.5,升级前为 7.1 在将 symfony 4.4 更新到 5 之前,我已经遵循了这个文档(symfony ...

回答 1 投票 0

如果自定义安全捆绑包中出现身份验证错误,如何重定向到注销页面

我正在尝试创建自定义安全包。 我可以设法让一些东西发挥作用(漫长而艰难:-))。 除了当我在某个地方出现身份验证错误时,我想重新路由到...

回答 1 投票 0

symfony2 login_check 和自定义身份验证提供程序

我的项目中有以下代码文件,它们与自定义身份验证提供程序完美配合,我可以在authenticate(TokenInterface $token)中拦截请求,我已经把...

回答 1 投票 0

使用 Symfony2 通过 API 使用用户密码进行身份验证

我有一个 OAuth API,需要用户名和密码才能获取用户对象(资源所有者密码凭据流程)。我试图得到这个最终结果: 用户输入用户名/密码 西...

回答 1 投票 0

SonataMediaBundle - 如何上传图像?

可能应该标题为:“SonataMediaBundle - 缺少的操作方法在哪里?”。 我用 sonataAdminBundle 和 sonataDoctrineORMAdminBundle (以及其他一些)制作了一些管理后端,其中大部分都是

回答 2 投票 0

costum 包 symfony2 中命名空间出现拼写错误

我正在遵循教程“将 Twitter OAuth 库转换为 Symfony 2 Bundle 的简单方法”教程 但不适合我,我总是收到此错误: “自动加载器预期级别”FEB\

回答 1 投票 0

Symfony 4 覆盖 Sonata 管理 CRUD 控制器

我在覆盖 Symfony 4 上的 Sonata Admin 的 editAction 时遇到问题。 我的问题是我有这个用于编辑帖子的界面,正如您所看到的这两张图片: 每次管理员更改...

回答 1 投票 0

Symfony2 中的表单后处理

我是 Symfony 的新手,我正在尝试创建一个绑定到实体用户的表单。 该实体的一个字段的类型为 ArrayCollection。它实际上是与另一个对象的 OneToMany 关系...

回答 2 投票 0

如何为 phpUnit 模拟 EntityManager?

我正在为这个课程编写一个单元测试: 我正在为这门课编写单元测试: <?php namespace AppBundle\Managers\CRUD; use Doctrine\ORM\EntityManager; use CommonLibs\Interfaces\CrudManagerInterface; use AppBundle\Entity\Pet; use CommonLibs\Helpers\PaginatorHelper; use AppBundle\Entity\Person; use AppBundle\Managers\CRUD\PetManager; use AppBundle\AppBundle; class PersonManager extends CrudManagerInterface { /** * @var EntityManager */ private $em; /** * @var PetManager */ private $petManager; public function __construct(EntityManager $em,PetManager $petManager) { $this->em=$em; $this->petManager=$petManager; } /** * {@inheritDoc} * @see \CommonLibs\Interfaces\CrudManagerInterface::search() * @return AppBundle\Entity\Person[] */ public function search(array $searchParams, array $order, $page, $limit) { $queryBuilder=$this->em->createQueryBuilder(); $queryBuilder=$queryBuilder->select('p')->from('AppBundle:Person','p'); if(isset($searchParams[Person::NAME])) { $queryBuilder->andWhere('p.name LIKE :name')->setParameter('name','%'.$searchParams[Person::NAME].'%'); } $petNameSearch=isset($searchParams[Pet::NAME]); $petTypeSearch=isset($searchParams[Pet::TYPE]); if( $petNameSearch || $petTypeSearch ) { $queryBuilder->join('p.pets','pe'); if($petNameSearch) { $queryBuilder->andWhere('pe.name LIKE :pet_name')->setParameter('pet_name','%'.$searchParams[Pet::NAME].'$'); } if($petTypeSearch) { if(!is_array($searchParams[Pet::TYPE])) { $searchParams[Pet::TYPE]=array($searchParams[Pet::TYPE]); } $queryBuilder->andWhere('pe.type IN (:pet_types)')->setParameter('pet_types',$searchParams[Pet::TYPE]); } /** * @var Doctrine\ORM\Query */ $query=$queryBuilder->getQuery(); if((int)$limit>0) { $query->setFirstResult(PaginatorHelper::calculateFirstResult($page,$limit))->setMaxResults((int)$limit); } $results=$query->getResult(); return $results; } } /** * {@inheritDoc} * @see \CommonLibs\Interfaces\CrudManagerInterface::getById() * @return AppBundle\Entity\Person */ public function getById($id) { return $this->em->getManager('AppBundle:Person')->findById($id); } /** * {@inheritDoc} * @see \CommonLibs\Interfaces\CrudManagerInterface::add() * * @param array $dataToAdd * * $dataToAdd Must have one of the follofiwng formats: * * FORMAT 1: * [ * Person:NAME=>"value" * ] * * FORMAT 2: * * [ * [ * Person:NAME=>"value" * ], * [ * Person:NAME=>"value" * ], * [ * Person:NAME=>"value" * ] * ] * * @return AppBundle\Entiry\Person[] with the modified persons */ public function add(array $dataToAdd) { /** * @var AppBundle\Entiry\Person $insertedPersons */ $insertedPersons=[]; foreach($dataToAdd as $key=>$data) { $personToInsert=new Person(); if(is_array($data)) { $personToInsert=$this->add($data); if($personToInsert==false) { return false; } } elseif(!$this->setReference($personToInsert,$key,$data)) { $personToInsert->$$key=$data; } if(is_array($personToInsert)) { $insertedPersons=array_merge($insertedPersons,$personToInsert); } else { $this->em->flush($personToInsert); $insertedPersons[]=$personToInsert; } } if(!empty($insertedPersons)) { $this->em->flush(); } return $insertedPersons; } /** * {@inheritDoc} * @see \CommonLibs\Interfaces\CrudManagerInterface::edit() */ public function edit(array $changedData) { $em=$this->em->getManager('AppBundle:Person'); foreach($changedData as $id => $fieldsToChange) { $item=$this->getById($id); foreach($fieldsToChange as $fieldName=>$fieldValue){ if(!$this->setReference($item,$fieldName,$fieldValue)){ $item->$$fieldName=$fieldValue; } } $em->merge($item); } $em->flush(); } /** * {@inheritDoc} * @see \CommonLibs\Interfaces\CrudManagerInterface::delete() * * @param array changedData * Should contain data in the following formats: * FORMAT 1: * * [ * Person::ID=>^an_id^ * Person::NAME=>^a name of a person^ * ] * * FORMAT2: * [ * Person::ID=>[^an_id1^,^an_id2^,^an_id3^...,^an_idn^] * Person::NAME=>^a name of a person^ * ] * * The $changedData MUST contain at least one of Person::ID or Person::NAME. * Therefore you can ommit one of Person::ID or Person::NAME but NOT both. */ public function delete(array $changedData) { $queryBuilder=$this->em->createQueryBuilder(); $queryBuilder->delete()->from('AppBundle:Person','p'); $canDelete=false; if(isset($changedData[Person::ID])) { if(!is_array($changedData[Person::ID])) { $changedData[Person::ID]=[$changedData[Person::ID]]; } $queryBuilder->where('person.id IN (:id)')->bindParam('id',$changedData[Person::ID]); $canDelete=true; } if(isset($changedData[Person::NAME])) { $queryBuilder->orWhere('person.name is :name')->bindParam('name',$changedData[Person::NAME]); $canDelete=true; } if($canDelete) { $query=$queryBuilder->getQuery(); $query->execute(); } return $canDelete; } /** * Set referencing fields to person. * * @param AppBundle\Entiry\Person $item The item to set the reference * @param string $referencingKey A string that Indicates the input field. * The strings for the param above are defined as constants at AppBundle\Entiry\Person. * @param mixed $referencingValue The value of referencing key * * @return boolean */ private function setReference($item,$referencingKey,$referencingValue) { /** * @var AppBundle\Entity\Pet $pet */ $pet=null; if($referencingKey===Person::PET) { if(is_numeric($referencingValue)) {//Given pet id $pet=$this->petManager->getById($referencingValue);//Searching pet by id } elseif (is_object($referencingValue) && $referencingValue instanceof AppBundle\Entity\Pet ){//Given directly a pet Object $pet=$referencingValue; } $item->$$referencingKey=$referencingValue; return true; } return false; } } 我想模拟 Doctrine 的实体管理器。但我不知道要返回什么才能成功使用 Doctrine 的查询生成器,但没有实际的数据库连接。 好吧,如果你想真正遵循最佳实践,你不应该嘲笑实体管理器,因为你不拥有它;您可以在以下链接阅读更多内容 https://github.com/mockito/mockito/wiki/How-to-write-good-tests https://adamwathan.me/2017/01/02/dont-mock-what-you-dont-own/ https://8thlight.com/blog/eric-smith/2011/10/27/thats-not-yours.html 好吧,现在,如果你想走那条路,你可以像嘲笑 EntityManager 中的所有其他对象一样嘲笑 PHPUnit 如果您使用 PHPUnit >= 5.7 且 PHP > 5.5 $mockedEm = $this->createMock(EntityManager::class) 或 PHP <= 5.5 $mockedEm = $this->createMock('Doctrine\\ORM\\EntityManager'); 一旦你模拟了它,你就必须声明所有预设的响应和期望:预设的响应是为了让你的代码工作,而期望是为了让它成为一个模拟 举个例子,这应该是罐头的 return $this->em->getManager('AppBundle:Person')->findById($id); 正如您将看到的,为每个方法调用声明一个固定方法可能非常困难且过度;例如,在这里,你应该这样做 $mockedEm = $this->createMock(EntityManager::class) $mockedPersonManager = $this->createMock(...); $mockedEm->method('getManager')->willReturn(mockedPersonManager); $mockedPersonManager->findOneBy(...)->willReturn(...); (当然你必须用实际值替换...) 最后,记住模拟不是存根

回答 1 投票 0

在 Symfony API 中自动处理 property_path

我有一个在 Symfony3 中内置的 REST-API。 作为示例,这里是使用 FormBuilderInterface 创建的表单中 Price 的 API 字段。下面的代码示例是 ApiBundle/Form/PriceType.php c...

回答 1 投票 0

Sentry Queue 与 Symfony Messenger 集成

我正在尝试使用哨兵队列设置 Symfony Messenger,但有一段时间没有任何运气。我无法在网上找到有关此特定主题的任何资源。我正在尝试使用示例哨兵提供...

回答 1 投票 0

Magento 2 Rest API,PUT 目录请求不起作用

我正在使用 Symfony 应用程序向 Magento 2 Rest Api 发送请求。当我发送 PUT 请求来更新目录时,它不会更改 Magento 中的目录信息,但会更改名称和其他

回答 1 投票 0

Symfony Doctrine 对于数据库中的同一列有两个属性

这是一个示例实体 使用 ApiPlatform\Metadata\ApiResource; 使用 Doctrine\ORM\Mapping 作为 ORM; 使用 Symfony\Component\Serializer\Annotation\Groups; #[ORM\Table(名称: '用户')] #[API资源( 操作...

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.