第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

Symfony 5 從控制臺(tái)命令生成 URL

Symfony 5 從控制臺(tái)命令生成 URL

PHP
江戶川亂折騰 2023-05-12 16:06:53
我是 Symfony 的新手,正在使用 5.x。我已經(jīng)使用 Symfony\Component\Console\Command\Command 創(chuàng)建了一個(gè)控制臺(tái)命令,并且正在嘗試使用 Symfony\Component\HttpClient\HttpClient 來(lái) POST 到一個(gè) URL。我需要生成在同一臺(tái)機(jī)器上運(yùn)行的路由的 URL(但將來(lái)這可能會(huì)更改為不同的機(jī)器),因此主機(jī)可能類似于 localhost 或 example.com,并且 API 的端口是自定義的。我在網(wǎng)上搜索過(guò),但我得到的唯一可能的解決方案是使用 Symfony\Component\Routing\Generator\UrlGeneratorInterface,并且網(wǎng)上充斥著舊版本 Symfony 的代碼示例,我還沒(méi)有設(shè)法得到這個(gè)工作。我最近的嘗試是:public function __construct(UrlGeneratorInterface $router){    parent::__construct();    $this->router = $router;}但我真的不明白如何將參數(shù) UrlGeneratorInterface $router 注入構(gòu)造函數(shù)。我收到未提供參數(shù)的錯(cuò)誤。我是否必須在其他地方創(chuàng)建 UrlGenerator 的實(shí)例并將其注入此處,或者是否有更簡(jiǎn)單的方法從命令中生成 Symfony 中的絕對(duì) URL?我還不太了解容器。$url = $context->generate('view', ['Param' => $message['Param']], UrlGeneratorInterface::ABSOLUTE_URL);服務(wù).yaml:App\Command\MyCommand:    arguments: ['@router.default']是否有更簡(jiǎn)單的方法通過(guò)顯式指定主機(jī)、協(xié)議、端口、路由、參數(shù)等從控制臺(tái)命令生成 URL?為什么 UrlGeneratorInterface 或 RouterInterface 不自動(dòng)裝配?如果我還啟用了自動(dòng)裝配,是否需要在 services.yaml 中手動(dòng)指定接線為 $router.default ?我知道執(zhí)行函數(shù)的實(shí)現(xiàn)可能不正確,但如果不先讓構(gòu)造函數(shù)工作,我就無(wú)法修復(fù)它。這仍在進(jìn)行中。
查看完整描述

3 回答

?
慕田峪4524236

TA貢獻(xiàn)1875條經(jīng)驗(yàn) 獲得超5個(gè)贊

private $router您似乎遇到的問(wèn)題不是由于您的服務(wù)聲明,而是您缺少中變量的聲明MyCommand。

因此,您可以保留services.yaml要點(diǎn)中顯示的內(nèi)容,無(wú)需更改自動(dòng)裝配變量,也不必手動(dòng)聲明命令

此外,您不需要$context從路由器中獲取,您也可以在您的 中設(shè)置基本 URLframework.yaml,在這里您可以找到我找到它的位置。

請(qǐng)注意,我從執(zhí)行中刪除了一些代碼,這是因?yàn)槲覠o(wú)法訪問(wèn)您的其他文件。你可以重新添加這個(gè)。


查看完整回答
反對(duì) 回復(fù) 2023-05-12
?
慕斯709654

TA貢獻(xiàn)1840條經(jīng)驗(yàn) 獲得超5個(gè)贊

好吧,解決這個(gè)問(wèn)題并不是那么簡(jiǎn)單。許多文檔已過(guò)時(shí)或未完全解決此問(wèn)題。這是我到目前為止得到的:


服務(wù).yaml:


Symfony\Component\Routing\RouterInterface:

? ? arguments: ['@router']

應(yīng)用程序.php:


#!/usr/bin/env php

<?php

// application.php


require __DIR__.'/vendor/autoload.php';

require __DIR__.'/src/Kernel.php';


use Symfony\Bundle\FrameworkBundle\Console\Application;

use Symfony\Component\Routing\RouterInterface;

use Symfony\Component\Dotenv\Dotenv;


$dotenv = new Dotenv();

$dotenv->load(__DIR__.'/.env', __DIR__.'/.env.local');


$kernel = new App\Kernel(getenv('APP_ENV'), getenv('APP_DEBUG'));

$kernel->boot();


$container = $kernel->getContainer();


$application = new Application($kernel);


$application->add(new App\Command\MyCommand($container->get('router')));


$application->run();

注意:我將應(yīng)用程序?qū)敫臑?Symfony\Bundle\FrameworkBundle\Console\Application


我的命令.php:


<?php

// src/Command/MyCommand.php

namespace App\Command;


use Symfony\Component\Console\Command\Command;

use Symfony\Component\Console\Command\LockableTrait;

use Symfony\Component\Console\Input\InputInterface;

use Symfony\Component\Console\Output\OutputInterface;

use Symfony\Component\Routing\Generator\UrlGeneratorInterface;

use Symfony\Component\Routing\RouterInterface;

use Symfony\Component\HttpClient\HttpClient;

use App\SQSHelper;


class MyCommand extends Command

{

? ? use LockableTrait;


? ? // the name of the command (the part after "bin/console")

? ? protected static $defaultName = 'app:my-command';


? ? protected $router;


? ? public function __construct(RouterInterface $router)

? ? {

? ? ? ? parent::__construct();

? ? ? ? $this->router = $router;

? ? }


? ? protected function configure()

? ? {

? ? }


? ? protected function execute(InputInterface $input, OutputInterface $output)

? ? {

? ? ? ? if($this->lock()) { // Prevent running more than one instance

? ? ? ? ? ? $endpoint =?

? ? ? ? ? ? $queueName = 'Queue';

? ? ? ? ? ? $queue = new SQSHelper();


? ? ? ? ? ? while($queue->getApproxNumberOfMessages($queueName)) {

? ? ? ? ? ? ? ? $message = $queue->receiveMessage($queueName);

? ? ? ? ? ? ? ? if($message) {

? ? ? ? ? ? ? ? ? ? if($message['__EOQ__'] ?? FALSE) // End-of-Queue marker received

? ? ? ? ? ? ? ? ? ? ? ? break;


? ? ? ? ? ? ? ? ? ? $context = $this->router->getContext();

? ? ? ? ? ? ? ? ? ? $context->setHost('localhost');

? ? ? ? ? ? ? ? ? ? $context->setHttpPort('49100');

? ? ? ? ? ? ? ? ? ? $context->setHttpsPort('49100');

? ? ? ? ? ? ? ? ? ? $context->setScheme('https');

? ? ? ? ? ? ? ? ? ? $context->setBaseUrl('');


? ? ? ? ? ? ? ? ? ? $url = $this->router->generate('ep', ['MessageId' => $message['MessageId']], UrlGeneratorInterface::ABSOLUTE_URL);


? ? ? ? ? ? ? ? ? ? $client = HttpClient::create();

? ? ? ? ? ? ? ? ? ? $response = $client->request('POST', $url, [

? ? ? ? ? ? ? ? ? ? ? ? 'headers' => ['Content-Type' => 'application/json'],

? ? ? ? ? ? ? ? ? ? ? ? 'body' => $message['Body'] // Already JSON encoded

? ? ? ? ? ? ? ? ? ? ]);

? ? ? ? ? ? ? ? }

? ? ? ? ? ? }


? ? ? ? ? ? $this->release(); // Release lock


? ? ? ? ? ? // this method must return an integer number with the "exit status code"

? ? ? ? ? ? // of the command. You can also use these constants to make code more readable


? ? ? ? ? ? // return this if there was no problem running the command

? ? ? ? ? ? // (it's equivalent to returning int(0))

? ? ? ? ? ? return Command::SUCCESS;


? ? ? ? ? ? // or return this if some error happened during the execution

? ? ? ? ? ? // (it's equivalent to returning int(1))

? ? ? ? ? ? // return Command::FAILURE;

? ? ? ? }

? ? }

}

如果有什么感覺(jué)不對(duì),或者如果您可以提供更好的解決方案或改進(jìn),請(qǐng)貢獻(xiàn)...


查看完整回答
反對(duì) 回復(fù) 2023-05-12
?
忽然笑

TA貢獻(xiàn)1806條經(jīng)驗(yàn) 獲得超5個(gè)贊

Symfony 5.1 引入的解決方案:


https://symfony.com/doc/current/routing.html#generating-urls-in-commands


在命令中生成 URL 與在服務(wù)中生成 URL 的工作方式相同。唯一的區(qū)別是命令不在 HTTP 上下文中執(zhí)行。因此,如果您生成絕對(duì) URL,您將獲得 http://localhost/ 作為主機(jī)名,而不是您的真實(shí)主機(jī)名。


解決方案是配置 default_uri 選項(xiàng)來(lái)定義命令在生成 URL 時(shí)使用的“請(qǐng)求上下文”:


# config/packages/routing.yaml

framework:

    router:

        # ...

        default_uri: 'https://example.org/my/path/'


查看完整回答
反對(duì) 回復(fù) 2023-05-12
  • 3 回答
  • 0 關(guān)注
  • 208 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)