我想创建调用的自定义事件,user_logged以便我可以将我的侦听器附加到这些事件.
我想在用户登录时执行一些功能.
我正在尝试使用Symfony2控制台库构建CLI工具.我有一些基本的工作,现在我想把它打包成一个phar.我已经阅读了一些例子,但我看到的那些非常简单(3个文件,没有命名空间等).
在我的src/目录中,我有以下内容:

上面src/我有一个console.php我执行运行应用程序.我也有一个vendors/目录,因为我正在使用composer来安装依赖项.console.php很简单:
#!/usr/bin/env php
<?php
set_time_limit(0);
$loader = require 'vendor/autoload.php';
use Symfony\Component\Console\Application;
use Bendihossan\Pinfo\Command\EnvironmentCommand;
use Bendihossan\Pinfo\Command\ExtensionsCommand;
use Bendihossan\Pinfo\Command\RunAllCommand;
$console = new Application();
$console->add(new RunAllCommand());
$console->add(new EnvironmentCommand);
$console->add(new ExtensionsCommand);
$console->run();
Run Code Online (Sandbox Code Playgroud)
从我对构建一个phar的理解(我很少)我认为我需要将其console.php作为存根和其他所有内容src/添加到我的所有依赖项中vendors/.
查看phpmaster.com上的示例代码,他们手动指定每个文件包含在phar中使用file_get_contents,但是我需要维护我的目录结构才能使用composer的自动加载器并保持PSR-0目录结构.
有没有一种简单的方法来创建.phar并在其中维护我的目录结构,所以我仍然可以使用composer的自动加载器?
我正在使用symfony/dependency-injection组件(注意:不使用完整的堆栈框架)
在注册新服务时,我想在构造函数中注入一个类的新实例.例:
$container->register('session', 'Vendor\Core\Session')
->addArgument(new PhpBridgeSessionStorage());
Run Code Online (Sandbox Code Playgroud)
该示例非常有效,但如果我想使用yml文件来定义此服务该怎么办?就像是:
services:
session:
class: Vendor\Core\Session
arguments: [ new Class\To\Inject ]
Run Code Online (Sandbox Code Playgroud)
我是否被迫将Class\To\Inject定义为新服务?或者创建一个服务工厂?
我跑了php artisan queue:listen大约27分钟后,它停止处理更多的工作.在我的错误日志中,我看到错误:
exception 'Symfony\Component\Process\Exception\RuntimeException' with message 'The process timed out.' in /var/www/l4site/vendor/symfony/process/Symfony/Component/Process/Process.php:413
Stack trace:
#0 /var/www/l4site/vendor/symfony/process/Symfony/Component/Process/Process.php(201): Symfony\Component\Process\Process->wait(NULL)
#1 /var/www/l4site/vendor/laravel/framework/src/Illuminate/Queue/Listener.php(63): Symfony\Component\Process\Process->run()
#2 /var/www/l4site/vendor/laravel/framework/src/Illuminate/Queue/Listener.php(50): Illuminate\Queue\Listener->runProcess(Object(Symfony\Component\Process\Process), 128)
#3 /var/www/l4site/vendor/laravel/framework/src/Illuminate/Queue/Console/ListenCommand.php(69): Illuminate\Queue\Listener->listen(NULL, 'default', 0, 128, 60)
#4 /var/www/l4site/vendor/laravel/framework/src/Illuminate/Console/Command.php(108): Illuminate\Queue\Console\ListenCommand->fire()
#5 /var/www/l4site/vendor/symfony/console/Symfony/Component/Console/Command/Command.php(240): Illuminate\Console\Command->execute(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#6 /var/www/l4site/vendor/laravel/framework/src/Illuminate/Console/Command.php(96): Symfony\Component\Console\Command\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#7 /var/www/l4site/vendor/symfony/console/Symfony/Component/Console/Application.php(193): Illuminate\Console\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#8 /var/www/l4site/vendor/symfony/console/Symfony/Component/Console/Application.php(106): Symfony\Component\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#9 /var/www/l4site/artisan(59): Symfony\Component\Console\Application->run()
#10 {main}
Run Code Online (Sandbox Code Playgroud)

这是一个错误吗?我不认为听众应该超时!
第二轮听众在3小时后超时.我用php-fgm在nginx上运行Laravel 4.
我正在使用Goutte从UTF-8网站上搜索,Goutte内部使用Guzzle.该网站声明了UTF-8的元标记,因此:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
Run Code Online (Sandbox Code Playgroud)
但是,内容类型标题是:
Content-Type: text/html
Run Code Online (Sandbox Code Playgroud)
并不是:
Content-Type: text/html; charset=utf-8
Run Code Online (Sandbox Code Playgroud)
因此,当我刮,Goutte没有发现它是UTF-8,并且错误地抓取数据.远程站点不在我的控制之下,所以我无法解决问题!这是一组用于复制问题的脚本.一,刮刀:
<?php
require_once realpath(__DIR__ . '/..') . '/vendor/goutte/goutte.phar';
$url = 'http://crawler-tests.local/utf-8.php';
use Goutte\Client;
$client = new Client();
$crawler = $client->request('get', $url);
$text = $crawler->text();
echo 'Whole page: ' . $text . "\n";
Run Code Online (Sandbox Code Playgroud)
现在要放置在Web服务器上的测试页面:
<?php
// Correct
#header('Content-Type: text/html; charset=utf-8');
// Incorrect
header('Content-Type: text/html');
?>
<!DOCTYPE html>
<html>
<head>
<title>UTF-8 test</title>
<meta charset="utf-8" />
</head>
<body>
<p>When the Content-Header header is incomplete, the pound sign …Run Code Online (Sandbox Code Playgroud) 我使用Symfony标准版并试图让Symfony Finder组件像服务一样,但没有找到它.要使用Finder,我需要手动创建它,如:
$finder = new Symfony\Component\Finder\Finder();
Run Code Online (Sandbox Code Playgroud)
为什么我无法从服务容器中获取它?这是错的吗?
PS Symfony Filesystem组件存在于服务容器中,并按名称提供filesystem.
php symfony symfony-components symfony-filesystem symfony-finder
我在 Symfony 控制台应用程序中定义了两个命令,clean-redis-keys并且clean-temp-files. 我想定义一个clean执行这两个命令的命令。
我该怎么做?
默认情况下,Symfony Finder组件按ASC顺序对文件进行排序.
//sorting by ASC order
$finder->files()->in($this->getDumpPath())->sortByModifiedTime();
Run Code Online (Sandbox Code Playgroud)
我怎样才能按文件排序DESC?
我需要允许类型实现两个接口(Foo和Bar),而不是其中之一.
interface Foo {};
interface Bar {};
class Foz implements Foo {};
class Baz implements Bar {};
class Foobar implements Foo, Bar {};
$resolver = new OptionsResolver();
$resolver->setRequired('data');
$resolver->setAllowedTypes('data', ['Foo', 'Bar']);
Run Code Online (Sandbox Code Playgroud)
错误!允许Foz和Baz实例.
我需要允许类型的子类Bar,而不是Bar实例.
class Bar {};
class Foobar extends Bar {};
class FoobarBaz extends Foobar {};
$resolver = new OptionsResolver();
$resolver->setRequired('data');
$resolver->setAllowedTypes('data', ['Bar']);
Run Code Online (Sandbox Code Playgroud)
错误!也允许Bar实例.
我可以重新设计我的类/接口,但这不是设计问题.那么,用这个组件可以实现吗?
我目前正在将Symfony Validator组件集成到自定义PHP应用程序中.到目前为止,一切都工作得很好,我可以验证我的用户输入.
现在我想将验证消息转换为另一个语言环境并集成了翻译组件(无论如何由于DefaultTranslator中的TranslatorInterface的延迟而需要它).
默认转换程序仅支持硬编码到ValidationConstraints中的语言环境.据我所知,我需要指定一个自定义转换器实例,它从Validator组件中的xliff文件加载字符串.
这是我有多远,但德国翻译可悲的是没有加载:
$translator = new Translator('de_DE');
$translator->setFallbackLocale('en_GB');
$translator->addLoader('xliff', new XliffFileLoader());
$builder = new ValidatorBuilder();
$validator = $builder
->setTranslator($translator)
->getValidator();
$violations = $validator->validateValue($input, self::getValidationConstraints());
Run Code Online (Sandbox Code Playgroud)
有什么建议我可能会错过这里吗?
我想开发一个基于交互式命令的 php 应用程序,所以我做了一些研究并碰到了 Symfony\Console 组件。这很棒,因为它让met运行
php script.php command --option
Run Code Online (Sandbox Code Playgroud)
但是,脚本然后运行命令并关闭,我希望能够运行另一个命令。所以基本上,像
php script.php
Run Code Online (Sandbox Code Playgroud)
然后在 php://stdin 上监听命令,结构为
command --option
Run Code Online (Sandbox Code Playgroud)
然后运行命令并开始侦听新命令。当运行特定的“退出”命令时,脚本应终止。
我对 Symfony 和 Console 组件比较陌生,所以对如何使用 Symfony\Console 实现这一点有什么想法吗?因为我真的很喜欢 Symfony\Console 抽象所有命令的方式。
php console command-line-interface symfony symfony-components
我正在创建一个bundle,如果request是Ajax请求,它可以将fooAction重命名为fooAjaxAction.正如那个问题的答案所说,我必须扩展控制器解析器类.ResourceNotFoundException如果我更改config.yml中的controller_resolver.class,我有一个.但如果我不这样做,我没有任何错误(但没有覆盖,所以这不是我想要的)
我的问题是:如何注册我的新控制器解析器并使用它?我是对的 ?错了吗?
这就是我所做的:
您可以在packagist中找到我的Bundle进行测试并通过以下方式下载:
composer require "/prefix-bundle":"dev-dev"
在AppKernel.php中激活它:
<?php
// AppKernel.php
new \PrefixBundle\PrefixBundle()
Run Code Online (Sandbox Code Playgroud)
配置
# App/Config/config.yml
parameters:
controller_resolver.class: PrefixBundle\Component\Controller\ControllerResolver
Run Code Online (Sandbox Code Playgroud)
所以这是我的自定义控制器.
<?php
namespace \PrefixBundle\Component\Controller;
use Symfony\Component\HttpKernel\ControllerControllerResolver as BaseControllerResolver;
use Symfony\Component\HttpFoundation\Request;
class ControllerResolver extends BaseControllerResolver
{
public function getArguments(Request $request, $controller)
{
parent::getArguments($request, $controller);
}
}
Run Code Online (Sandbox Code Playgroud)
我假设这个控制器没有做任何事情,我将来会添加逻辑.
我在使用Silex和安全服务方面遇到了一些问题.
当用户(正确)将数据输入我的登录表单时,它不会被重定向到应用程序URL.他仍然在同一页面,并在登录表单页面中进行调试,在安全提供程序中没有任何内容表明他已经过身份验证.但是,在"成功登录"之后,如果我直接在浏览器中输入网址,我可以访问,因为我已通过身份验证.像这个过程:
首页 - >登录检查(登录确定) - >主页(未经验证) - >/app(已验证)
如果登录工作正常,我希望它直接重定向到/ app,并理解为什么在我的主页中,即使成功登录后,安全提供商仍然说我没有经过身份验证.
我正在写下面的代码:
的index.php
<?php
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Validator\Constraints as Assert;
require_once __DIR__.'/../vendor/autoload.php';
$app = new Silex\Application();
/**
* App Registrations & Debug Setting
*/
$app
->register(new Silex\Provider\TwigServiceProvider(), array('twig.path' => __DIR__.'/../views'))
->register(new Silex\Provider\UrlGeneratorServiceProvider())
->register(new Silex\Provider\SessionServiceProvider())
->register(new Silex\Provider\FormServiceProvider())
->register(new Silex\Provider\ValidatorServiceProvider())
->register(new Silex\Provider\TranslationServiceProvider(), array(
'translator.messages' => array(),
))
->register(new Silex\Provider\DoctrineServiceProvider(), array(
'db.options' => array(
'driver' => 'pdo_mysql',
'dbname' => 'pomodesk',
'host' => 'localhost',
'user' => 'root',
'password' => 'root'
)
))
->register(new Silex\Provider\SecurityServiceProvider(), …Run Code Online (Sandbox Code Playgroud)