我有一个扩展 AbstractLoginFormAuthenticator 的验证器类,并使用 security.firewalls.main.custom_authenticator 设置声明它。
但是,我省略了设置 security.enable_authenticator_manager 设置 - 但一切都按预期工作,没有额外的弃用等。我猜想,当未设置 enable_authenticator_manager 时,它默认为 false,但无论如何都会使用authenticator 类。这样设置的目的是什么?
我将所有控制器移至/src/Web/Controller我的 Symfony 6 项目中,如下所示
\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\nRun Code Online (Sandbox Code Playgroud)\n我的routes.yaml作相应修改
\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\nRun Code Online (Sandbox Code Playgroud)\n现在的问题是我所有的路线都有一个前缀为的名称app_web。我想这是由于这种结构。
$ php bin/console debug:router命令输出如下:
...\n...\napp_web_post_index GET|HEAD ANY ANY /post/ \napp_web_post_create GET|HEAD|POST ANY ANY /post/create \nRun Code Online (Sandbox Code Playgroud)\n在这里我只想要名字post_indexHow do I摆脱这个前缀?
使用最新的 Symfony 6.1 和文档说.env.local覆盖中设置的值.env
这对我不起作用,即当在 中设置值时.env,它不会被 中的值覆盖.env.local。当未在 中设置时.env,.env.local将考虑 from 的值。
参考:
我创建了这个控制器
<?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) 我正在使用 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) 我正在尝试使用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) 版本:
当 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 "C:\Users\cimba\Documents\project\vendor\phpunit\phpunit\src\Util\Printer.php" 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) 在我的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 …
我有一台带有 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 ..
用户弃用:在 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,包学说/规则)
但我还没有找到任何选择