标签: symfony4

Symfony4 使用路由注释扩展控制器

我正在构建一个 web 应用程序,Symfony因为现在我不得不为我构建的每个新控制器重复一个特定的模式。

例如我有这个AdminController

/**
 * @Route("/pro/{uniqid}")
 * @ParamConverter("company", options={"mapping":{"uniqid" = "uniqid"}})
 * @Security("is_granted(constant('App\\Security\\Voter\\CompanyVoter::VIEW'), company)")
 * @package App\Controller
 */
 class AdminController extends Controller
 {
    /**
     * @Route("/admin/users/", name="users")
     * @return \Symfony\Component\HttpFoundation\Response
     */
     public function users(Company $company){}
 }
Run Code Online (Sandbox Code Playgroud)

因此,每个控制器必须重新定义@Route@ParamConverter@Security这是非常多余。

我试图创建一个LoggedController定义每个注释的,然后 makeController扩展那个LoggedController,但这不起作用。

有没有解决方案,或者我应该在每次创建一个Controller需要实现它的新注解时继续复制/粘贴这些注解?

编辑:我添加Company实体声明:

/**
 * @ORM\Entity(repositoryClass="App\Repository\CompanyRepository")
 */
 class Company
 {
   /**
    * @ORM\Id()
    * @ORM\GeneratedValue()
    * @ORM\Column(type="integer")
    */
    private $id;
Run Code Online (Sandbox Code Playgroud)

php annotations symfony symfony4

0
推荐指数
1
解决办法
1119
查看次数

Symfony 4 MSSQL sqlsrv:找不到驱动程序

我想将我的项目升级到 symfony 4,但该学说似乎没有找到查找我的数据库所需的 mssql 驱动程序。

$ php bin/console doctrine:database:create --env=dev

 In AbstractMySQLDriver.php line 125:

 An exception occurred in driver: could not find driver  
Run Code Online (Sandbox Code Playgroud)

突出的是错误发生在 MySQLDriver.php 中,而我明确告诉 symfony 我想使用 sqlsrv 驱动程序。

这些是我的学说.yaml 设置:

parameters:
    # Adds a fallback DATABASE_URL if the env var is not set.
    # This allows you to run cache:warmup even if your
    # environment variables are not available yet.
    # You should not need to change this value.
    env(DATABASE_URL): 'sqlsrv://my_user:my_password@my_host/my_dbname'

doctrine:
    dbal:
        # configure these for your …
Run Code Online (Sandbox Code Playgroud)

php doctrine-orm sqlsrv symfony4

0
推荐指数
1
解决办法
4426
查看次数

使用 SerializerInterface 时修复 symfony 中的循环引用

序列化组件时出现循环引用错误。通常这可以修复使用

$normalizer->setCircularReferenceHandler()
Run Code Online (Sandbox Code Playgroud)

但是,我正在使用 SerializerInterface 像这样:

/**
  * @Route("/get/{id}", name="get_order_by_id", methods="GET")
  */
 public function getOrderById(SerializerInterface $serializer, OrderRepository $orderRepository, $id): Response
 {
   return new Response($serializer->serialize(
     $orderRepository->find($id),
     'json',
     array('groups' => array('default')))
   );
  }
Run Code Online (Sandbox Code Playgroud)

使用此接口进行序列化时是否可以修复循环引用错误?

serialization doctrine symfony doctrine-orm symfony4

0
推荐指数
1
解决办法
891
查看次数

Symfony 4:试图从错误的命名空间调用函数

我是 symfony 的新手。

我正在尝试学习一些教程,但我坚持使用 ORM

我使用以下命令生成了一个实体:

php bin/console make:entity
Run Code Online (Sandbox Code Playgroud)

我的实体有一个字段“名称”,因此有一个函数 setName()

我用以下命令生成了一个控制器:

php bin/console make:controller TestController
Run Code Online (Sandbox Code Playgroud)

在此控制器中,我尝试注册一个新条目,但出现以下错误:

试图从命名空间“App\Controller”调用函数“setName”。

我做错了什么?

测试控制器.php:

<?php

namespace App\Controller;

use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;

use App\Entity\Team;

class TestController extends Controller
{
    /**
     * @Route("/test", name="test")
     */
    public function index()
    {
        $entityManager = $this->getDoctrine()->getManager();
        $team = new Team();
        $team.setName("Marvels 6");

        $entityManager->persist($team);
        $entityManager->flush();

        return $this->json([
            'message' => 'Welcome to your new controller!',
            'path' => 'src/Controller/TestController.php',
        ]);
    }
}
Run Code Online (Sandbox Code Playgroud)

团队.php:

<?php

namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity(repositoryClass="App\Repository\TeamRepository") …
Run Code Online (Sandbox Code Playgroud)

namespaces symfony symfony4

0
推荐指数
1
解决办法
3127
查看次数

Symfony 4,从数据夹具类获取根路径目录

在 Symfony 4 项目中,是否有一种正确的/symfony 方法可以从 Fixture 类中获取根路径目录?

最终目标:

当我部署我的网站时,我使用fixtures 类在我的数据库中加载一些“默认”数据。(可能这不是一个好习惯)

在这些默认数据中,我需要存储项目的根路径目录,因为我需要来自项目中自定义 utils 和服务类的这些信息。

我知道有多种方法可以做到这一点。目前,我对绝对路径进行了硬编码(<= 有史以来最丑陋的方式;))

symfony symfony4

0
推荐指数
1
解决办法
2228
查看次数

Symfony 4 - 如何在表单提交后为重定向中的路由设置实体 ID

构建 Symfony 4.1 应用程序。在我的 ProfileController ...

我有一个带有表单的 booking_new 方法来创建一个新的预订:

/**
 * @Route("/profile/booking/new", name="profile_booking_new")
 */
public function booking_new(EntityManagerInterface $em, Request $request)
{

    $form = $this->createForm(BookingFormType::class);

    $form->handleRequest($request);
    if ($form->isSubmitted() && $form->isValid()) {
        /** @var @var Booking $booking */
        $booking = $form->getData();
        $booking->setUser($this->getUser());

        $em->persist($booking);
        $em->flush();

        return $this->redirectToRoute('profile_booking_show');

    }

    return $this->render('profile/bookings/booking_new.html.twig',[
        'bookingForm' => $form->createView()
    ]);
}
Run Code Online (Sandbox Code Playgroud)

然后我有一个 booking_show 方法来渲染单个预订页面,并将路由设置为预订 ID:

/**
 * @Route("/profile/booking/{id}", name="profile_booking_show")
 */
public function booking_show(BookingRepository $bookingRepo, $id)
{
    /** @var Booking $booking */
    $booking = $bookingRepo->findOneBy(['id' => $id]);

    if (!$booking) { …
Run Code Online (Sandbox Code Playgroud)

symfony doctrine-orm symfony4

0
推荐指数
1
解决办法
1175
查看次数

Symfony 4,编辑用户实体并保存新密码

我执行了make:crud为实体用户生成一些文件的命令。

一切都像一种魅力,但我在编辑用户时遇到了一个问题。当我编辑用户时,我可以:

  • 更改密码并保存

或者

  • 不要修改密码并保存

从生成的用户“编辑”控制器:

/**
 * @Route("/{id}/edit", name="user_edit", methods={"GET","POST"})
 */
public function edit(Request $request, User $user): Response
{
    $form = $this->createForm(UserType::class, $user);
    $form->handleRequest($request);

    if ($form->isSubmitted() && $form->isValid()) {

        // HERE : How can I check if the password was changed ? 

        $this->getDoctrine()->getManager()->flush();

        return $this->redirectToRoute('user_index', [
            'id' => $user->getId(),
        ]);
    }

    return $this->render('user/edit.html.twig', [
        'user' => $user,
        'form' => $form->createView(),
        'title' => 'edit userr'
    ]);
}
Run Code Online (Sandbox Code Playgroud)

如何检查密码是否已更改?用户变量包含新密码值...

如果密码是新的,我必须使用编码器服务。如果没有,我只需要用新数据更新用户

php symfony4

0
推荐指数
1
解决办法
2663
查看次数

为什么Doctrine Query抛出“太多参数” QueryException

这在控制器中

$candidats = $repository->findList(
$data["recherche_candidat"]["diplomes"],
$data["recherche_candidat"]["categories"]);
Run Code Online (Sandbox Code Playgroud)

这在存储库中

public function findList($diplomes,$categories,)
{
    $qb=$this->createQueryBuilder('c');

    if($categories!=null){
        $qb->andWhere('c.categorie IN (:value)')
            ->setParameter(':value', $categories);
    }

    if($diplomes!=null) {
        $qb->andWhere('c.diplome IN (:value)')
            ->setParameter(':value', $diplomes);
    }

    return $qb
        ->getQuery()
        ->getResult();
}
Run Code Online (Sandbox Code Playgroud)

问题是当diplomes和类别不为空时,我看到一个错误:

参数太多:查询定义了1个参数,而您绑定了2个

一项无效的工作;例如diplomes == null和category!= null可以正常工作而不会出现错误

php mysql doctrine symfony symfony4

0
推荐指数
1
解决办法
169
查看次数

弃用了 ListenerInterface,将您的听众变成可调用对象

弃用了 ListenerInterface,将您的听众变成可调用对象

此更新后与 Symfony 4.3 相关的问题,他们更新了这些安全更新。1. 弃用 ListenerInterface,将你的监听器变成可调用对象

如何在接口中使用回调?

symfony symfony4

0
推荐指数
1
解决办法
975
查看次数

Symfony:4 属性路径中给出的“整数”、“NULL”类型的预期参数

低于错误,

属性路径“experience”中给出的“整数”、“NULL”类型的预期参数。

代码如下,

->add('experience', TextType::class, [
    'constraints' => [
        new NotBlank([
            "message" => $this->translator->trans('Please enter experience.')
        ]),
        new Length([
            'max' => 2
        ]),
    ],
    'required' => false
])
Run Code Online (Sandbox Code Playgroud)

当我提交空白表格(创建时间)时,它显示“请输入经验”。

现在在编辑表单上,如果我插入错误的值(更多数据,如 3434)它显示我的值不应超过 2 个字符

当我在编辑时发送空白数据时出现问题。提交空白经验(表格中的必填字段),它给出以下错误

属性路径“experience”中给出的“整数”、“NULL”类型的预期参数。

我曾尝试过互联网上的不同选项,例如将“empty_data”设置为 null 或 '' 但它不起作用。

symfony symfony4

0
推荐指数
1
解决办法
1777
查看次数