标签: symfony6

Symfony 6 security.enable_authenticator_manager 是多余的设置吗?

我有一个扩展 AbstractLoginFormAuthenticator 的验证器类,并使用 security.firewalls.main.custom_authenticator 设置声明它。

但是,我省略了设置 security.enable_authenticator_manager 设置 - 但一切都按预期工作,没有额外的弃用等。我猜想,当未设置 enable_authenticator_manager 时,它默认为 false,但无论如何都会使用authenticator 类。这样设置的目的是什么?

php symfony symfony6

8
推荐指数
1
解决办法
4356
查看次数

Symfony 6 中的命名路由,控制器位于内部目录中

我将所有控制器移至/src/Web/Controller我的 Symfony 6 项目中,如下所示

\n
\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 src\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 ...\n\xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 Web\n\xe2\x94\x82   |    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Controller\n\xe2\x94\x82   |    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 ....\n|   |\xe2\x94\x80\xe2\x94\x80 Kernel.php\n
Run Code Online (Sandbox Code Playgroud)\n

我的routes.yaml作相应修改

\n
\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 src\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 ...\n\xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 Web\n\xe2\x94\x82   |    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Controller\n\xe2\x94\x82   |    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 ....\n|   |\xe2\x94\x80\xe2\x94\x80 Kernel.php\n
Run Code Online (Sandbox Code Playgroud)\n

现在的问题是我所有的路线都有一个前缀为的名称app_web。我想这是由于这种结构。

\n

$ php bin/console debug:router命令输出如下:

\n
...\n...\napp_web_post_index    GET|HEAD        ANY      ANY    /post/             \napp_web_post_create   GET|HEAD|POST   ANY      ANY    /post/create \n
Run Code Online (Sandbox Code Playgroud)\n

在这里我只想要名字post_indexHow do I摆脱这个前缀?

\n

php symfony symfony-routing symfony6

5
推荐指数
1
解决办法
1027
查看次数

Symfony 忽略/不覆盖 .env.local 文件的值

使用最新的 Symfony 6.1 和文档.env.local覆盖中设置的值.env

这对我不起作用,即当在 中设置值时.env,它不会被 中的值覆盖.env.local。当未在 中设置时.env.env.local将考虑 from 的值。

参考:

php symfony dotenv symfony6

5
推荐指数
1
解决办法
2965
查看次数

无法从容器中获取控制器,因为它是私有的。您是否忘记用“controller.service_arguments”标记服务?

我创建了这个控制器

<?php

namespace App\Controller;

use App\Interface\GetDataServiceInterface;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;

#[Route('/api')]
class ApiController
{
    private GetDataServiceInterface $getDataService;

    public function __construct(GetDataServiceInterface $getDataService)
    {
        $this->getDataService = $getDataService;
    }

    #[Route('/products', name: 'products', methods: ['GET'])]
    public function products(): Response
    {
        
        return new Response(
            $this->getDataService->getData()
        );
    }
}
Run Code Online (Sandbox Code Playgroud)

GetDataServiceInterface然后我在 services.yml 上设置了自动装配

parameters:

services:
    # default configuration for services in *this* file
    _defaults:
        autowire: true      # Automatically injects dependencies in your services.
        autoconfigure: true # Automatically registers your services as commands, event subscribers, etc.

    # …
Run Code Online (Sandbox Code Playgroud)

php symfony symfony6

5
推荐指数
1
解决办法
4453
查看次数

如何在另一个 ValueResolver 中使用 ValueResolver 或使用 Symfony 链接 ValueResolver

我正在使用 Symfony 6.2 和 php 8.1。

自从 SF 6.2 更新以来,我必须删除SensioFrameworkExtraBundle我的代码并将其迁移ParamConverter到新的自定义ValueResolver.

然而,我面临着这次迁移中缺少一个功能或者我错过了一些东西:(

通过自定义ParamConverter,我可以解析参数并重写Request. 这允许我链接任何ParamConverter. 新的with方式custom ValueResolver不会重写Request中的内容。当然,我可以强制重写内容或在中创建新属性,Request但我觉得这是错误或不正确的方法。

我的用例:

TranslationKey 的解析器需要 TranslationDomain 和 TranslationLanguage 的解析器结果。基本上我想链接这些解析器或将它们分组,就像我们可以在形式约束中所做的那样。

服务.yaml

App\Service\\ranslation\Request\ValueResolver\TranslationLanguageValueResolver:  
  tags:  
    - { name: controller.argument_value_resolver, priority: 103 }  
  
App\Service\Translation\Request\ValueResolver\\TranslationDomainValueResolver:  
  tags:  
    - { name: controller.argument_value_resolver, priority: 102 }  
  
App\Service\Translation\Request\ValueResolver\TranslationKeyValueResolver:  
  tags:  
    - { name: controller.argument_value_resolver, priority: 101 }
Run Code Online (Sandbox Code Playgroud)

我的控制器:

public function edit (Request             $request,  
   TranslationLanguage $translationLanguage,  
   TranslationDomain   $translationDomain,  
   TranslationKey      $translationKey,  
   TranslationHelper   $translationHelper, …
Run Code Online (Sandbox Code Playgroud)

php resolver symfony symfony6

5
推荐指数
0
解决办法
415
查看次数

客户端不支持自定义选项

我正在尝试使用ClientBuildersymfony 6 来使用 Elasticsearch。我收到以下错误

The HTTP client Symfony\Component\HttpClient\Psr18Client is not supported for custom options
Run Code Online (Sandbox Code Playgroud)

这是我尝试过的代码。我在 laravel 中也有同样有效的代码行。

$hosts = ['https://localhost:9200'];
$client = ClientBuilder::create()
    ->setHosts($hosts)
    ->setSSLVerification(false)
    ->setBasicAuthentication('elastic', 'password')
    ->build();
Run Code Online (Sandbox Code Playgroud)

php symfony6

3
推荐指数
1
解决办法
951
查看次数

Symfony PHPUnit:无法启动会话,因为标头已发送

版本:

  • PHP:8.1
  • PHP 单元:9.5.21
  • 交响乐6.1

当 PhpUnit 运行以下测试时,我收到有关会话无法启动的错误。有谁知道这个问题以及如何解决它?

以下主题无法回答我的问题,或者建议的解决方案对我不起作用:

我尝试了第二个链接建议的解决方案:@session_start()@runInSeparateProcess没有任何效果。也许我只是误解了我的问题,但我现在被困了一个星期。

protected function setUp(): void
{
  @session_start();
  parent::setUp();
}

/**
 * @runInSeparateProcess
 */
public function testLoginFailure(): void
{
    $client = static::createClient();
    $crawler = $client->request('GET', '/login');

    $form = $crawler->selectButton('Login')->form();

    $form['email']->setValue('bob@gmail.com');
    $form['password']->setValue('123abcABC%');

    $crawler = $client->submit($form);
    $this->assertResponseIsSuccessful();
}
Run Code Online (Sandbox Code Playgroud)
<!-- Failed to start the session because headers have already been sent by &quot;C:\Users\cimba\Documents\project\vendor\phpunit\phpunit\src\Util\Printer.php&quot; at line 104. (500 Internal Server Error) -->

C:\Users\cimba\Documents\project\vendor\symfony\framework-bundle\Test\BrowserKitAssertionsTrait.php:142
C:\Users\cimba\Documents\project\vendor\symfony\framework-bundle\Test\BrowserKitAssertionsTrait.php:33
C:\Users\cimba\Documents\project\tests\InternalLoginTest.php:51 …
Run Code Online (Sandbox Code Playgroud)

php phpunit symfony php-8.1 symfony6

3
推荐指数
1
解决办法
2999
查看次数

学说“实体”不是有效的实体或映射的超类

在我的doctrine.php我有以下配置

<?php

// See https://symfony.com/doc/current/reference/configuration/framework.html

namespace Symfony\Component\DependencyInjection\Loader\Configurator;

return static function (ContainerConfigurator $container) {
    $container->extension('doctrine', [
        'dbal' => [
            'url' => '%env(DATABASE_URL)%',
        ],
        'orm' => [
            'auto_generate_proxy_classes' => true,
            'auto_mapping' => true,
            'mappings' => [
                'default' => [
                    'is_bundle' => false,
                    'type' => 'annotation',
                    'dir' => '%kernel.project_dir%/src/Entity',
                    'prefix' => 'App\Entity',
                    'alias' => 'App'
                ]
            ]
        ]
    ]);
};
Run Code Online (Sandbox Code Playgroud)

我的实体类定义如下

namespace App\Entity;

use Doctrine\ORM\Mapping\Entity;
use Doctrine\ORM\Mapping\Table;

#[Entity(repositoryClass: EntityRepository::class)]
#[Table(name: 'entity')]
class Entity

...
Run Code Online (Sandbox Code Playgroud)

getRepository我尝试通过这样的调用来访问它

$entityRepository = $entityManager->getRepository(Entity::class);
Run Code Online (Sandbox Code Playgroud)

但这失败了is …

php doctrine symfony symfony6

3
推荐指数
1
解决办法
2022
查看次数

webpack-cli : 错误: 生成未知系统错误 -86 / Symfony6 / Mac M1

我有一台带有 M1 芯片的 Mac,我想知道该错误是否与此有关,因为在我的旧电脑上没有问题。

 % npm run dev           

> dev
> encore dev

Running webpack ...

[webpack-cli] Error: spawn Unknown system error -86
    at ChildProcess.spawn (node:internal/child_process:420:11)
    at spawn (node:child_process:757:9)
    at Object.execFile (node:child_process:348:17)
    at module.exports.fileCommandJson (/Users/Desktop/quest/wild-series/node_modules/node-notifier/lib/utils.js:88:13)
    at NotificationCenter.notifyRaw (/Users/Desktop/quest/wild-series/node_modules/node-notifier/notifiers/notificationcenter.js:81:11)
    at WebpackNotifierPlugin.compilationDone (/Users/Desktop/quest/wild-series/node_modules/webpack-notifier/index.js:129:14)
    at Hook.eval [as callAsync] (eval at create (/Users/Desktop/quest/wild-series/node_modules/tapable/lib/HookCodeFactory.js:33:10), <anonymous>:18:1)
    at Hook.CALL_ASYNC_DELEGATE [as _callAsync] (/Users/Desktop/quest/wild-series/node_modules/tapable/lib/Hook.js:18:14)
    at /Users//Desktop/quest/wild-series/node_modules/webpack/lib/Compiler.js:498:23
    at Compiler.emitRecords (/Users/Desktop/quest/wild-series/node_modules/webpack/lib/Compiler.js:919:5) {
  errno: -86,
  code: 'Unknown system error -86',
  syscall: 'spawn'
}
Run Code Online (Sandbox Code Playgroud)

我尝试过使用纱线和 npm ..

php npm webpack-encore webpack-cli symfony6

3
推荐指数
1
解决办法
1425
查看次数

将doctrine/orm从2.11.1升级到2.16.2后,我遇到以下问题:

用户弃用:在 ORM 3.0 中,AttributeDriver 将报告声明它们的类的字段。这可能会发现无效的映射配置。要立即选择新模式,请将“reportFieldsWhereDeclared”构造函数参数设置为 true。(AttributeDriver.php:82由App_KernelProdContainer.php:175调用,https://github.com/doctrine/orm/pull/10455,包doctrine/orm){“例外”:“[对象](ErrorException(代码:0 ):用户已弃用:在 ORM 3.0 中,AttributeDriver 将报告声明它们的类的字段。(App_KernelProdContainer.php:175 调用的 AttributeDriver.php:82,https: //github.com/doctrine/orm/pull/ 10455 , packagedoctrine/orm) {"exception":"[object] (ErrorException(code: 0): User Deprecated: 在 ORM 3.0 中,AttributeDriver 将报告声明它们的类的字段。这可能会发现无效的映射配置.今天要选择进入新模式,请将“reportFieldsWhereDeclared”构造函数参数设置为 true。(App_KernelProdContainer.php:175 调用的 AttributeDriver.php:82,https: //github.com/doctrine/orm/pull/10455,包学说/规则)

但我还没有找到任何选择

symfony6

3
推荐指数
1
解决办法
2337
查看次数