我的 Rails 6 应用程序出现错误,因为它找不到我的数据目标,但我不明白为什么。
\nChrome\xe2\x80\x99s 控制台中的错误:
\nUncaught Error: Missing target element "channel.messages"\nRun Code Online (Sandbox Code Playgroud)\n我的看法:
\n<div class="col-sm-10" data-controller="channel" data-channel-id="<%= @channel.id %>">\n <!-- Chat messages -->\n <div class="pr-6 py-4 flex-1">\n <div data-target="channel.messages">\n <%= render @channel.messages %>\n </div>\n <div class="pb-6 pr-4 flex-none">\n <div class="flex rounded-lg border-2 border-grey overflow-hidden">\n <span class="text-3xl text-grey border-r-2 border-grey p-2">\n <svg class="fill-current h-6 w-6 block" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"><path d="M16 10c0 .553-.048 1-.601 1H11v4.399c0 .552-.447.601-1 .601-.553 0-1-.049-1-.601V11H4.601C4.049 11 4 10.553 4 10c0-.553.049-1 .601-1H9V4.601C9 4.048 9.447 …Run Code Online (Sandbox Code Playgroud) 我的环境设置如下:带有 PHP7.1.33 版本的 Wamp 3、composer 2 和 Symfony 二进制文件。
但是当我尝试运行时symfony new my_project_name --version=4.4 --full出现此错误:
在“./my_project_name”创建“symfony/website-sculpture”项目 您的 PHP 版本 5.4.12 受 CVE-2013-6420 影响,无法安全地执行证书验证,我们强烈建议您升级。[InvalidArgumentException] 在可使用 PHP 版本、PHP 扩展和 Composer 版本安装的版本中找不到版本 4.4.* 的包 symfony/website-sculpture。
正如错误中提到的,使用 PHP 5.4.12,但是当我运行时,php --version我得到 7.1.33 版本。
在我的 Symfony 5 应用程序中,我想针对不同的任务以及不同的环境使用不同的缓存。
例如我的配置如下所示:
framework:
cache:
pools:
cache.auth:
adapter: cache.adapter.redis
provider: app.my_custom_redis_provider
cache.sap:
adapter: cache.adapter.redis
provider: app.my_custom_redis_provider
services:
app.my_custom_redis_provider:
arguments:
- '%env(REDIS_URL)%'
-
retry_interval: 2
timeout: '%env(REDIS_TIMEOUT)%'
class: Redis
factory:
- Symfony\Component\Cache\Adapter\RedisAdapter
- createConnection
Run Code Online (Sandbox Code Playgroud)
我在我的类中使用依赖注入。那么我如何定义特定类使用这两个缓存池中的哪一个呢?
目前我的缓存是这样的:
class SapListService implements ListServiceInterface
{
use LoggerTrait;
private CountryServiceInterface $countryService;
private CurrencyServiceInterface $currencyService;
public function __construct(
SapClientFactoryInterface $sapClient,
CacheItemPoolInterface $cache,
ParameterBagInterface $params
) {
$sapUser = $params->get('sap_user');
$sapPw = $params->get('sap_pw');
$urlStruktur = $params->get('sap_struktur');
$this->countryService = $sapClient->getCountryService($sapUser, $sapPw, $urlStruktur, $cache);
$this->currencyService = $sapClient->getCurrencyService($sapUser, $sapPw, …Run Code Online (Sandbox Code Playgroud) 我正在开发另一个使用端到端测试和.env文件的 PHP 项目。但是,在运行测试之前,我需要修改.env文件以指向测试数据库(而不是开发数据库)。当我从事 Symfony 项目时,我认为我不需要这样做,它只是自动加载测试环境。
我从以前使用旧版本的一些经验知道,每个环境曾经有一个不同的前端控制器,例如app.php,app_dev.php等等,但据我所知,现在情况并非如此。
Symfony 如何知道加载测试环境以进行端到端测试?
我的 HTML 代码与此类似:
<a onclick="customerDelete056b0d37(event)" id="ixnat-d26294a3" data-id="dsddsss3226294a3">
<i data-js="icons" id="it2ul" class="icons">
<polyline points="21 8 21 21 3 21 3 8"></polyline>
<rect x="1" y="3" width="22" height="5"></rect>
<line x1="10" y1="12" x2="14" y2="12"></line>
</i>
</a>
Run Code Online (Sandbox Code Playgroud)
<a>现在,如果任何子元素被单击,我想获取该元素。
正如e.target返回已被单击的元素一样。
假设<rect x="1" y="3" width="22" height="5"></rect>被点击了。然后e.target会返回<rect x="1" y="3" width="22" height="5"></rect>
但我想要像本例中那样关联的元素onClick。这将是
<a onclick="customerDelete056b0d37(event)" id="ixnat-d26294a3" data-id="dsddsss3226294a3">
这样我就可以得到data-id这个元素的属性了。(也可以是其他属性,只是data-id作为示例编写)。
另外,因为我不能使用,closest因为它没有固定位置,也不会始终是a标签。它可能是另一个标签,例如button.
如何获取在单击子元素时具有事件处理程序的元素?
注意:所有属性或属性值都不会被固定。一切都将是动态的。
如何拦截请求并将其发送HttpClient到另一台服务器,并在进行一些修改后从该服务器返回响应?
原始请求将包含数据和文件。我正在寻找最简单的解决方案,直到将原始原始正文复制为字符串。我所坚持的部分是以最短的方式将Request对象插入到HttpClient请求中(无需编写代码来一点一点地复制数据和标头),其余的(处理响应)我将管理。
php proxy symfony symfony-http-foundation symfony-http-client
我正在开发我的第一个 Symfony 5 项目,并且很难使用内置的MailerInterface. 我之前曾在 Symfony 3 中使用过 Swift Mailer,以前从未遇到过类似的问题。
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Mailer\MailerInterface;
...
class SomeController extends AbstractController {
public someAction(Request $request, MailerInterface $mailer) {
...
$email = (new TemplatedEmail())
->from(new Address('address@example.com', 'My Symfony Mail'))
//->to($user->getEmail())
->to('receiver@example.com')
->subject('Subject')
->htmlTemplate('email.html.twig');
$mailer->send($email);
}
}
// .env
#MAILER_DSN=smtp://user:pass@smtp.example.com:25
MAILER_DSN=sendmail://default
Run Code Online (Sandbox Code Playgroud)
如果MAILER_DSN有一些格式错误,则会抛出异常并显示在 Symfony 调试器页面上,例如The "invaliddsn" mailer DSN must contain a scheme...因此,配置的 DSN 似乎smtp://user:pass@smtp.example.com:25是正确的。在其他邮件应用程序中使用相同的凭据、主机和端口没有问题。
但是,使用此代码时不会显示错误/异常,并且我根本没有收到任何邮件。当然,我已经仔细检查了日志(没有错误)、接收者垃圾邮件文件夹(什么也没有)。指定 SMTP 服务器或 sendmail 没有任何区别。
Symfony 文档仅解释如何处理异常,但在我的例子中没有抛出异常。
虽然关于 Symfony 中的邮件问题还有很多其他问题,但其中大多数都涉及较旧的 Swift Mailer …
composer init'我对命令有点困惑composer require
如果我是对的:
requireinit我有一个项目,但我不想将其发布到https://packagist.org/
我只想向我的项目添加一些库。
composer init在跑步之前我一定要先跑步吗composer require?
我看了一个教程,他们在composer init调用之前使用命令composer require,这让我很困惑,因为我认为这与composer init在 packagist 上发布库有关。
我正在使用 Symfony 4.4 和 Symfony Messenger
Messenger 配置包括传输和路由:
messenger:
failure_transport: failed
transports:
async_medium:
dsn: '%env(MESSENGER_TRANSPORT_DSN)%'
retry_strategy:
max_retries: 3
delay: 1000
failed:
...
routing:
'Name\Space\MessageHandler\SnowplowNotificationHandler': async_medium
Run Code Online (Sandbox Code Playgroud)
尽管处理程序看起来配置正确(当我运行控制台 debug:messenger 时,它显示正确分配给传输)
Messenger
messenger.bus.default
The following messages can be dispatched:
Name\Space\Message\SnowplowMessage
handled by Name\Space\MessageHandler\SnowplowEmailNotificationHandler
Run Code Online (Sandbox Code Playgroud)
消息类SnowplowMessage不会排队,而是立即发送到_invoke()处理程序的方法。
我正在使用 AMQP(RabbitMQ 作为传输)并且它配置正确,因为没有显示错误并且命令控制台信使:setup-transport 正确创建队列
php ×7
symfony ×7
composer-php ×1
doctrine ×1
dom-events ×1
javascript ×1
jquery ×1
phpunit ×1
postgresql ×1
proxy ×1
stimulusjs ×1
symfony-4.4 ×1
symfony-cli ×1
symfony4 ×1
symfony5 ×1