我正在构建一个 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) 我想将我的项目升级到 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) 序列化组件时出现循环引用错误。通常这可以修复使用
$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)
使用此接口进行序列化时是否可以修复循环引用错误?
我是 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) 在 Symfony 4 项目中,是否有一种正确的/symfony 方法可以从 Fixture 类中获取根路径目录?
最终目标:
当我部署我的网站时,我使用fixtures 类在我的数据库中加载一些“默认”数据。(可能这不是一个好习惯)
在这些默认数据中,我需要存储项目的根路径目录,因为我需要来自项目中自定义 utils 和服务类的这些信息。
我知道有多种方法可以做到这一点。目前,我对绝对路径进行了硬编码(<= 有史以来最丑陋的方式;))
构建 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) 我执行了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)
如何检查密码是否已更改?用户变量包含新密码值...
如果密码是新的,我必须使用编码器服务。如果没有,我只需要用新数据更新用户
这在控制器中
$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可以正常工作而不会出现错误
弃用了 ListenerInterface,将您的听众变成可调用对象
此更新后与 Symfony 4.3 相关的问题,他们更新了这些安全更新。1. 弃用 ListenerInterface,将你的监听器变成可调用对象
如何在接口中使用回调?
低于错误,
属性路径“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 或 '' 但它不起作用。
symfony4 ×10
symfony ×8
php ×4
doctrine-orm ×3
doctrine ×2
annotations ×1
mysql ×1
namespaces ×1
sqlsrv ×1