我试图弄清楚如何手动注入参数DefaultController(没有自动装配)。我发现有两种方法可以实现这一目标。
我可以使用arguments:
services:
_defaults:
autowire: false
autoconfigure: true
public: true
App\Service\SomeService: ~
App\Controller\DefaultController:
arguments: #!
$service: '@App\Service\SomeService'
$scalar: 22
Run Code Online (Sandbox Code Playgroud)
与此同时,我可以使用bind密钥:
services:
_defaults:
autowire: false
autoconfigure: true
public: true
App\Service\SomeService: ~
App\Controller\DefaultController:
bind: #!
$service: '@App\Service\SomeService'
$scalar: 22
Run Code Online (Sandbox Code Playgroud)
我的控制器:
class DefaultController extends Controller
{
public function __construct($service, $scalar)
{
var_dump(get_class($service), $scalar);
}
...
Run Code Online (Sandbox Code Playgroud)
这两个选项产生相同的输出:
string(23) "App\Service\SomeService" int(22)
那么究竟是什么这两个配置项之间的差异arguments和bind,他们做同样的事情?
我正在使用PhpSpreadsheet在Symfony 4中生成一个Excel文件.我的代码是:
$spreadsheet = $this->generateExcel($content);
$writer = new Xlsx($spreadsheet);
$filename = "myFile.xlsx";
$writer->save($filename); // LINE I WANT TO AVOID
$response = new BinaryFileResponse($filename);
$response->headers->set('Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
$response->setContentDisposition(
ResponseHeaderBag::DISPOSITION_ATTACHMENT,
$filename
);
Run Code Online (Sandbox Code Playgroud)
但我不想保存文件,然后读取它以返回给用户.我想直接下载Excel内容.有办法吗?
我已经搜索了如何生成内容流(正如这个答案所说),但我没有成功.
提前致谢,对不起我的英语
我想包括
<link href="{{ asset('css/mystyle.css') }}"
rel="stylesheet"/>
Run Code Online (Sandbox Code Playgroud)
在我的twig文件中并渲染它.但它给了我未捕获的PHP异常Twig_Error_Runtime:
"在呈现模板期间抛出了异常("资产清单文件"/../public/build/manifest.json"不存在.")
它在我使用时确实有效
link href="css/mystyle.css"
rel="stylesheet"/>
Run Code Online (Sandbox Code Playgroud)
.以下是我的控制器:
<?php
namespace App\Controller;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
class WelcomeController extends AbstractController
{
/**
* @Route("/", name="welcome")
*/
public function index()
{
return $this->render('welcome/index.html.twig');
}
}
Run Code Online (Sandbox Code Playgroud)
以下是我的树枝模板:
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="description" content="">
<meta name="author" content="">
<title>Let's Explore Symfony 4</title>
<!-- Bootstrap core CSS -->
<link rel="stylesheet"
href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.3/css/bootstrap.min.css"
integrity="sha384-Zug+QiDoJOrZ5t4lssLdxGhVrurbmBWopoEl+M6BdEfwnCJZtKxi1KgxUyJq13dy"
crossorigin="anonymous">
<link href="{{ asset('css/mystyle.css') }}"
rel="stylesheet"/>
</head> …Run Code Online (Sandbox Code Playgroud) 假设我有两个实体:a post和a comment.每个都post可以有很多comments.现在,假设我有一个评论表.它应该接受用户输入并将其存储在数据库中.
简单的东西.至少,它应该是,但我不能让它工作.
创建评论(孩子)时如何引用帖子(父母)?我尝试手动将post_id注释表单作为隐藏字段传递,但收到错误抱怨帖子ID是一个字符串.
Expected argument of type "App\Entity\Post or null", "string" given.
Run Code Online (Sandbox Code Playgroud)
CommentType.php
public function buildForm(FormBuilderInterface $builder, array $options)
{
$post_id = $options['post_id'];
$builder->add('content', TextareaType::class, [
'constraints' => [
new Assert\NotBlank(['message' => 'Your comment cannot be blank.']),
new Assert\Length([
'min' => 10,
'minMessage' => 'Your comment must be at least {{ limit }} characters long.',
]),
],
])->add('post', HiddenType::class, ['data' => $post_id]);
}
public function configureOptions(OptionsResolver $resolver)
{ …Run Code Online (Sandbox Code Playgroud) 我在 Symfony 框架中使用表单集合软删除项目有问题
我想添加和删除与 Symfony 表单集合相关的项目,如果我从集合中删除项目,此项目必须从关系记录中软删除
用下图你可以想象关系
这是我在 Symfony 表单中的表单集合
Main form
+
|
ProductType+
| |
| |
| PackagesType+
| |
| |
| PackageProductsType
|
|
+
Run Code Online (Sandbox Code Playgroud)
基于表单集合的Symfony示例在前端使用JS添加和删除包产品
我的问题是,当我在实体的注释中package_product通过激活orphanRemoval=true完全删除时,每件事都运行良好,但记录完全删除,我想根据我的建议软删除记录,但是当我在Package实体中更改以下功能时
Main form
+
|
ProductType+
| |
| |
| PackagesType+
| |
| |
| PackageProductsType
|
|
+
Run Code Online (Sandbox Code Playgroud)
始终在顶部功能中,我获取最后一条记录packageProducts,当我删除此行$packageProduct->setPackage(null);以禁用记录中的丢失数据并将其替换$packageProduct->setDeletedAt(new \Datetime());为设置已删除项目时,在保存的记录中删除记录从数据库中删除并添加了一条新记录,其中填充了最后一条记录数据并删除了约会时间。
例如:
PackageProduct 删除第一项之前的记录:
+----+------------+------------+--------+-----------+
| ID | Product_id | package_id …Run Code Online (Sandbox Code Playgroud) 如何为每个环境设置不同的配置参数文件?
目前,参数parameters.yml都用于环境dev和prod环境,但我需要不同的参数才能在prod中部署我的应用程序.
如何在创建时自动将当前授权用户添加到资源 ( POST)。
我正在使用 JWT 身份验证,并且 /api/ 路由受到未授权用户的保护。我想设置它,以便当经过身份验证的用户创建新资源(即通过向 发送POST请求/api/articles)时,新创建的Article资源与经过身份验证的用户相关。
我目前正在使用EventSubscriber每个资源类型的自定义来从令牌存储中添加用户。
这是订阅者基类的要点:https : //gist.github.com/dsuurlant/5988f90e757b41454ce52050fd502273
以及扩展它的实体订阅者:https : //gist.github.com/dsuurlant/a8af7e6922679f45b818ec4ddad36286
但是,例如,如果实体构造函数需要用户作为参数,则这不起作用。
例如
class Book {
public User $owner;
public string $name;
public class __construct(User $user, string $name) {
$this->owner = $user;
$this->name = $name;
}
}
Run Code Online (Sandbox Code Playgroud)
如何在实体创建时自动注入授权用户?
我正在尝试重新开始开发,尝试使用 GoDaddy 在共享托管服务器上设置 Symfony。
我正在使用 Symfony 4(这里:http : //symfony.com/doc/current/page_creation.html)完成教程,但是URL.co.uk/lucky/number正在抛出 404。
我将完全相同的 URL 路由设置为 /(而不是幸运/数字)并且它工作正常。
routes.yaml和注释都会出现此问题。
<?php
namespace App\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Component\HttpFoundation\Response;
class ArticleController
{
/**
* @Route("/")
*/
public function homepage()
{
return new Response('OMG! My new first page already! ');
}
/**
* @Route("/news")
*/
public function news()
{
return new Response('This must be news?');
}
}
Run Code Online (Sandbox Code Playgroud)
例如,以上对 / 工作正常,但使用 /news 时出现 404 错误。
这可能是一个问题.htaccess吗?我的根目录中没有。
事实证明,使用上面的代码,URL.co.uk/index.php/news工作得很好。显然我不想要这个,但我希望它有助于深入了解它......
问题
我有一个新的设置postgres 10.5和symfony 4应用程序运行php 7.1.但是当我尝试运行迁移时.我一直收到以下Invalid value for parameter "client_encoding": "utf8mb4"错误.

重现步骤
.env文件上修改DSN以根据您的设置更正值.我是DATABASE_URL="pgsql://postgres:password@db:5432/a_db".php bin/console make:entityphp bin/console make:migration预期结果
我应该收到Success消息.
所以我的问题是
我遵循文档时在这里错过了什么?
我花了好几个小时试图让我的多实体表单工作,但它真的让我头疼,我找到的例子都没有。
我有一个User实体、UserRole实体和一个Role实体。UserRole 包含一个用户 ID 和一个角色 ID。只是一个链接表。
该表单显示了创建用户的字段,我希望也能够为新用户选择一个新角色。所以我尝试使用 EntityType,一个选择下拉列表很好地显示了所有角色(只有当我添加选项映射 => false 时),但在表单提交后不处理。它的数据不在 $form->getData() 中,用户已创建,而 user_role 条目从未创建。如果我在没有映射 => false 的情况下尝试它,它会抛出我:
Could not determine access type for property "user_roles" in class "App\Entity\User": The property "user_roles" in class "App\Entity\User" can be defined with the methods "addUserRole()", "removeUserRole()" but the new value must be an array or an instance of \Traversable, "App\Entity\Role" given..
Run Code Online (Sandbox Code Playgroud)
代码:
$form = $this->createFormBuilder(new User)
... //other add entries …Run Code Online (Sandbox Code Playgroud) symfony4 ×10
php ×8
symfony ×8
doctrine-orm ×1
forms ×1
mysql ×1
php-7 ×1
postgresql ×1
rendering ×1
routing ×1
soft-delete ×1
symfony-2.8 ×1
symfony-3.4 ×1
twig ×1