小编Łuk*_*oda的帖子

Symfony:控制器工厂

我正在制作一个自定义用户包,允许定义多个用户类型,使用自己的存储库,管理器,提供商等.因此,我决定创建一个控制器工厂,而不是创建有限的控制器组,这将产生控制器基于定义的用户类型和配置.但这提出了一个重要的问题 - 这些工厂应该在哪里运营?

现在,请注意,在工厂中创建控制器是不够的,我们还必须在某处设置所有路径.

问题是 - 什么是最好的架构呢?

在选择我将放置代码的图层时,我正在考虑,其中包括:

  1. 在Extension的load方法中加载工厂定义,并在那里创建所有控制器.问题:路由器在那里不可用,因为它发生在容器构建之前,所以我无法在同一个地方创建路由.

  2. Sooo ...也许在编译器传递?但编译器传递无法访问配置...我的意思是......实际上它已经,如果我只是加载配置并手动处理它,但我仍然不确定这是否是一个好地方,但我我现在正倾向于这个解决方案.

在创建路线时:

  1. 我应该在控制器工厂中放置路由创建逻辑吗?但我正在创建控制器作为服务,而工厂无法访问创建的控制器的serviceId,并且创建路由需要serviceId,所以不应该.

  2. 在控制器本身?我的意思是,这就是注释路由的工作方式,因此它可能是可行的.控制器必须ControllerInterface使用该方法实现类似我自己的东西getRoutes,并且外部服务/编译器传递需要首先创建控制器作为服务,然后从所述控制器获取路由,修改它们,以便它们引用该控制器的serviceId并将它们添加到路由器......无论这看起来多么混乱.

  3. 还有其他选择吗?

关于这种特殊模式的信息非常缺乏 - 控制器工厂:).

controller routes factory-pattern symfony

11
推荐指数
1
解决办法
824
查看次数

使用curlftpfs的FTP非常慢,无法使用

我使用curlftpfs挂载了ftp位置.问题是它非常缓慢到无用的程度.几乎所有事情的执行时间大约是10秒.它甚至包括让任何VIM命令工作,包括导航(!).我开始认为也许我做错了什么,因为根本无法满足这种反应.使用FileZilla下载 - > edit->上传文件要快得多,如果我需要等待10秒才能将光标向下移动到vim中的一行.任何人都知道为什么会这样?有些curlftpfs选项可以让它更快吗?

我有很好的联系.

ftp curlftpfs

7
推荐指数
2
解决办法
5998
查看次数

Git post-receive 钩子和环境变量

我有 git 服务器在Gitolite上运行,在“git”系统用户下。我添加到 git user: 的 ~/.profile 中export STAGE_PATH="/srv/http/stage",正如你可以猜到的,我想在推送更改时自动将存储库中的网站放在舞台上。然而,似乎变量 STAGE_PATH 在接收后挂钩中对我不可用。正常吗?有没有办法从 post-receive 挂钩访问环境变量?

git environment-variables git-post-receive

6
推荐指数
1
解决办法
4121
查看次数

PHP:用于管理实体类型的设计模式

我有User实体.我想拥有这个实体的多个"类型",具有不同的经理和存储库.所有User类型的所有实体仅共享UserInterface.现在,我正在寻找一种组织一切的好方法.我想到的第一件事是创建这样的东西:

interface UserTypeManagerInterface
{
  public function addUserType($name, RepositoryInterface $repository, ManagerInterface $manager);
  public function hasType($name);
  public function getRepository($type);
  public function getManager($type);
}
Run Code Online (Sandbox Code Playgroud)

然后在我想要同时管理多种类型的User地方,我会注入这个,并且在我想管理特定类型用户的地方,我只能为其类型注入特定的存储库和管理器对象.

看起来像一个非常干净的方法,但同时,当我想使用UserTypeManager我需要模拟的类创建测试时UserTypeManager,那么这个模拟将需要返回其他模拟(存储库和管理器).

这当然是可行的,但它让我思考是否可以避免这种情况.我能想到的唯一另一件事就是允许在测试过程中避免上述复杂性,这样就像这样:

interface UserTypeManagerInterface {
    public function addUserType($name, RepositoryInterface $repository, ManagerInterface $manager);
}

/**
 * My class managing multiple types of user.
 */
class ManageMultipleTypesOfUsers implements UserTypeManagerInterface {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

所以我只想将所有存储库和管理器添加到实现UserTypeManagerInterface接口的所有类中.所以对象会直接使用给他们的东西.

这样测试会更加清晰,因为我只需要模拟一个管理器和一个存储库来测试类ManageMultipleTypesOfUsers,但这感觉太像过度工程了.;)

这里有任何中间地带吗?

php design-patterns

6
推荐指数
1
解决办法
746
查看次数

使用Webpack编译的应用程序的插件系统

对于上下文:我正在使用后端的Symfony和前端的react/react-router开发我自己的产品,这是由Webpack捆绑在一起的.我打算将我的应用程序划分为"扩展",因此我将拥有"核心"捆绑包和多个不同的扩展捆绑包(这将是我的产品的附加功能集).

现在,我希望我的前端像我的后端一样可扩展.我希望能够将我的扩展包中新的React组件添加到我的"CoreBundle"中的现有"核心"组件集中.

但是,似乎Webpack将所有内容封装得太紧密,无法生成那种插件系统.是否有可能有多个捆绑包具有单独的Webpack配置,但它们的JavaScript将以允许开发插件系统的方式互连?目标是能够独立开发一个Bundle的JS,同时能够在这个过程中使用来自另一个Bundle的一些已编译的JS资源.

plugins symfony reactjs webpack react-router-v4

6
推荐指数
1
解决办法
330
查看次数

Symfony2:有条件地创建实体表

我有一个其中定义了实体的包。我希望能够以这种方式配置这个包,这个实体将或不会相关。因此,如果 bundle 配置正确,则不应使用app/console doctrine:schema:updateetc创建实体表,或者应该 - 它应该取决于配置。

如何有条件地“禁用”实体,使其表不会被创建app/console doctrine:schema:update

entity symfony doctrine-orm

5
推荐指数
1
解决办法
326
查看次数

Symfony:为什么在身份验证后应该执行一些用户检查?

我不明白这一点。UserCheckerInterface有两种方法:checkPreAuthcheckPostAuth。现在让我们看看它们在类中的实现UserChecker

class UserChecker implements UserCheckerInterface
{
    /**
     * {@inheritdoc}
     */
    public function checkPreAuth(UserInterface $user)
    {
        if (!$user instanceof AdvancedUserInterface) {
            return;
        }

        if (!$user->isAccountNonLocked()) {
            $ex = new LockedException('User account is locked.');
            $ex->setUser($user);
            throw $ex;
        }

        if (!$user->isEnabled()) {
            $ex = new DisabledException('User account is disabled.');
            $ex->setUser($user);
            throw $ex;
        }

        if (!$user->isAccountNonExpired()) {
            $ex = new AccountExpiredException('User account has expired.');
            $ex->setUser($user);
            throw $ex;
        }
    }

    /**
     * {@inheritdoc}
     */
    public function checkPostAuth(UserInterface …
Run Code Online (Sandbox Code Playgroud)

authentication symfony

5
推荐指数
1
解决办法
1564
查看次数

为什么将 docker-compose exec 的管道输出传输到 grep 会破坏它?

我正在运行此命令来运行,Drush它基本上是 Drupal 的 PHP CLI,在正在运行的容器中:

docker-compose -f ../docker-compose.test.yml exec php scripts/bin/vendor/drush.phar -r public_html status-report
Run Code Online (Sandbox Code Playgroud)

如果此命令正常,输出是有关容器中特定 Drupal 实例的状态信息列表。我不会将其粘贴在这里,因为它很长且无关紧要。

现在让我们通过管道将这些信息过滤到grep

docker-compose -f ../docker-compose.test.yml exec php scripts/bin/vendor/drush.phar -r public_html status-report | grep -e Warning -e Error
Run Code Online (Sandbox Code Playgroud)

结果是:

Cro  Error     L 
Gra  Warning   P 
HTT  Error     F 
HTT  Warning   T 
Dru  Warning   N 
XML  Error     L
Run Code Online (Sandbox Code Playgroud)

这是不对的,看起来像是被切成了碎片,而且大部分都不见了。

现在,如果我们通过添加标志来禁用伪 tty 的分配-T

docker-compose -f ../docker-compose.test.yml exec -T php scripts/bin/vendor/drush.phar -r public_html status-report | grep -e Warning -e Error
Run Code Online (Sandbox Code Playgroud)

输出是正确的:

Cron …
Run Code Online (Sandbox Code Playgroud)

php grep drush docker docker-compose

5
推荐指数
1
解决办法
3102
查看次数

gstreamer 的 udpsink 在发送约 1000 个数据包后停止流式传输

我正在尝试使用 gstreamer 流式传输我的 Raspberry Pi 相机。这是我的管道:

raspivid --nopreview -ih -hf -vf --width 800 --height 600 --framerate 20 --bitrate 2000000 --profile main --timeout 0 -g 4 -o - | gst-launch-1.0 -vvv fdsrc do-timestamp=true \
 ! h264parse ! omxh264dec ! clockoverlay time-format="%A | %d %B %Y | %H:%M:%S" ! omxh264enc target-bitrate=2000000 control-rate=1 ! h264parse ! rtph264pay config-interval=1 pt=96 ! udpsink host=targethost port=8004 sync=false
Run Code Online (Sandbox Code Playgroud)

它有效......几乎。我可以在目标主机上接收流一秒钟左右,然后停止。Gstreamer 不输出任何错误,不退出,它只是停止发送 UDP 数据包。

我安装iptraf在我的 Pi 上,我可以看到大约 1000 个数据包后 UDP 数据包发送停止。它可能会停在 ~800 个数据包或 ~1500 个数据包处,大约是这些数字。

现在有趣的是,有时它的工作时间更长,比如几个小时。但有时它几乎立即停止。我现在观察了大约两天,可能是它在晚上工作得更好,也许是因为那时流是漆黑的,所以压缩得更好,它发送的数据包更少?我不知道。什么可以停止发送数据包而不会出现任何错误?有人知道这里发生了什么吗?

补充 …

udp gstreamer

5
推荐指数
1
解决办法
665
查看次数

IntelliJ IDEA中的PHP调试

好吧,我可能很愚蠢,但我不能让它发挥作用.

设置是:

  • Ubuntu的
  • 的Apache2
  • Xdebug的
  • IntelliJ IDEA 11.1.3终极版
  • IntelliJ IDEA PHP插件

xdebug已安装.

我想调试Drupal站点,在我的本地机器上,项目在这里:

/var/www/luken/my-site
Run Code Online (Sandbox Code Playgroud)

和URL在这里:

http://localhost/luken/my-site
Run Code Online (Sandbox Code Playgroud)

因为我无法从现有源创建项目,所以我从头开始创建新项目(Web模块).现在的问题是,如果我正在运行"PHP脚本"的配置 - 调试器工作.但是,如果我尝试使用PHP Web应用程序的配置(因此项目将在浏览器中打开),它无法连接到调试器.我尝试了很多东西和不同的映射,但显然我错过了一些愚蠢的东西.上面的设置应该如何配置?

php debugging drupal xdebug intellij-idea

2
推荐指数
1
解决办法
4370
查看次数