Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit69c94d8

Browse files
committed
bug#5299 Command controller tweaks to#5062 (weaverryan)
This PR was merged into the 2.3 branch.Discussion----------Command controller tweaks to#5062| Q | A| ------------- | ---| Doc fix? | yes#5062| New docs? | no| Applies to | 2.3+| Fixed tickets |#5062Hi guys!This is a proofread and bug fix after merging#5062. Notably, I changed to use the `BufferedOutput` and returned a Response from the controller instead of the string.Please let me know if you see any errors - I was coding this right inside the docs 😇.Thanks!Commits-------aad7277 Fixing things thanks to Wouter59f8c95 Tweaks to the new using commands in a controller article
2 parentsf712586 +aad7277 commit69c94d8

File tree

1 file changed

+34
-14
lines changed

1 file changed

+34
-14
lines changed

‎cookbook/console/command_in_controller.rst

Lines changed: 34 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -12,25 +12,26 @@ You may have the need to execute some function that is only available in a
1212
console command. Usually, you should refactor the command and move some logic
1313
into a service that can be reused in the controller. However, when the command
1414
is part of a third-party library, you wouldn't want to modify or duplicate
15-
their code, but want to directlyexecute the commandinstead.
15+
their code. Instead, you canexecute the commanddirectly.
1616

1717
..caution::
1818

1919
In comparison with a direct call from the console, calling a command from
2020
a controller has a slight performance impact because of the request stack
21-
overhead. This way of calling a command is only useful for small tasks.
21+
overhead.
2222

23-
An example of this is sending the emails thatSwift Mailerspooled earlier
24-
:doc:`using the swiftmailer:spool:send command</cookbook/email/spool>`. Symfony
25-
allows you to directly execute a registeredcommand inside your controller::
23+
Imagine you want to send spooledSwift Mailermessages by
24+
:doc:`using the swiftmailer:spool:send command</cookbook/email/spool>`.
25+
Run thiscommandfrominside your controller via::
2626

2727
// src/AppBundle/Controller/SpoolController.php
2828
namespace AppBundle\Controller;
2929

3030
use Symfony\Bundle\FrameworkBundle\Console\Application;
3131
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
3232
use Symfony\Component\Console\Input\ArrayInput;
33-
use Symfony\Component\Console\Output\StreamOutput;
33+
use Symfony\Component\Console\Output\BufferedOutput;
34+
use Symfony\Component\HttpFoundation\Response;
3435

3536
class SpoolController extends Controller
3637
{
@@ -44,38 +45,57 @@ allows you to directly execute a registered command inside your controller::
4445
'command' => 'swiftmailer:spool:send',
4546
'--message-limit' => $messages,
4647
));
47-
$output = new StreamOutput(tmpfile(), StreamOutput::VERBOSITY_NORMAL);
48+
// our use NullOutput() if you don't need the outpu
49+
$output = new BufferedOutput();
4850
$application->run($input, $output);
4951

50-
rewind($output->getStream());
51-
$content = stream_get_contents($output->getStream());
52-
fclose($output->getStream());
52+
// return the output
53+
$content = $output->fetch();
5354

54-
return $content;
55+
returnnew Response($content);
5556
}
5657
}
5758

5859
Showing Colorized Command Output
5960
--------------------------------
6061

61-
By telling the ``StreamOutput`` it is decorated via thethird parameter,
62+
By telling the ``BufferedOutput`` it is decorated via thesecond parameter,
6263
it will return the Ansi color-coded content. The `SensioLabs AnsiToHtml converter`_
63-
can be required using ``Composer`` and helps you getting colorful HTML::
64+
can be used to convert this to colorful HTML.
65+
66+
First, require the package:
67+
68+
..code-block::bash
69+
70+
$ composer require sensiolabs/ansi-to-html
71+
72+
Now, use it in your controller::
6473

6574
// src/AppBundle/Controller/SpoolController.php
6675
namespace AppBundle\Controller;
6776

6877
use SensioLabs\AnsiConverter\AnsiToHtmlConverter;
78+
use Symfony\Component\Console\Output\BufferedOutput;
79+
use Symfony\Component\Console\Output\OutputInterface;
80+
use Symfony\Component\HttpFoundation\Response;
6981
// ...
7082

7183
class SpoolController extends Controller
7284
{
7385
public function sendSpoolAction($messages = 10)
7486
{
7587
// ...
88+
$output = new BufferedOutput(
89+
OutputInterface::VERBOSITY_NORMAL,
90+
true // true for decorated
91+
);
92+
// ...
7693

94+
// return the output
7795
$converter = new AnsiToHtmlConverter();
78-
return $converter->convert($content);
96+
$content = $output->fetch();
97+
98+
return new Response($converter->convert($content));
7999
}
80100
}
81101

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp