小编mcm*_*phy的帖子

限制 Symfony 4 路由到“dev”环境

我正在使用 Symfony 4.1。我正在尝试创建一个只能从“开发”环境中访问的路由“/dev/import/{file}”。

Symfony 2 的这个答案建议将路由routing_dev.yml添加condition: "request.getScriptName() == '/app_dev.php'"到或添加到您的路由定义。

这两种选择都不起作用。在 Symfony 4 中没有routing_dev.yml,现在是dev\routing_dev.YAML,据我所知只是配置(即你不能在那里创建路由)。必须定义routes.yaml适用于所有环境的路线。

添加路由routes.yaml和应用条件也不起作用,因为我们试图匹配app_dev前端控制器,它已在 Symfony 4 中删除。

根据Symfony 4 文档,路由中的条件仅公开ContextRequest对象,两者(AFAICT)都不包含有关当前环境的任何信息。所以,除非我遗漏了什么,否则其他条件也不起作用。

一种可能的,但(恕我直言)不优雅的解决方案是$_SERVER['APP_ENV'] = 'dev'在控制器中检查它,RouteNotFoundException如果没有则抛出一个。

而不是这样做,我真的希望要么在不在“开发”中时根本不可用路线,要么以某种方式定义路线以测试“开发”环境。

关于如何做到这一点的任何想法?最好使用注释。

php routes symfony symfony4

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

Symfony 4 服务依赖注入 - 构造函数与方法

所以我有一个 Symfony 控制器,我通过参数将所需的服务注入到我的方法中。

MySqlGroupDAO $groupDAO此控制器类的所有方法都使用参数 ( ) 之一。

目前,我将“通用”参数作为每个方法中的最后一个参数传递,如下所示:

/**
 * @Route("/{id}", methods={"POST"})
 * @IsGranted("EDIT_GROUP", subject="parentGroup")
 */
public function addGroup(Request $request, MySqlGroupDAO $groupDAO)  {
    $group = new Group();
    //code to init group from request

    $groupDAO->addGroup($group);

    return new Response("Adding $groupName");
}
Run Code Online (Sandbox Code Playgroud)

这样做可以让我消除我的__construct方法。但是,我不确定这是最好的方法。由于它在所有方法中都很常见,因此最好重新添加我的构造函数并执行以下操作吗?:

private $groupDAO;

public function __construct(
    Config $config,
    ValidatorInterface $validator,
    TranslatorInterface $translator,
    RequestStack $requestStack
) {
    parent::__construct($config, $validator, $translator, $requestStack);
    $this->groupDAO = new MySqlGroupDAO($config);
}


/**
 * @Route("/{id}", methods={"POST"})
 * @IsGranted("EDIT_GROUP", subject="parentGroup")
 */
public function addGroup(Request $request) …
Run Code Online (Sandbox Code Playgroud)

php constructor dependency-injection symfony

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

在setter php中输入Hinting vs Type Casting

在PHP中,我想知道以下功能是否相同?

class Foo  {
    public $bar;
    ...
    public function setBar($bar)  {
        $this->bar = (array)$bar;
    }
}


class Foo  {
    public $bar;
    ...
    public function setBar(array $bar)  {
        $this->bar = $bar;
    }
}
Run Code Online (Sandbox Code Playgroud)

哪两个被认为是最佳做法?两者都有意义吗?:

class Foo  {
    public $bar;
    ...
    public function setBar(array $bar)  {
        $this->bar = (array)$bar;
    }
}
Run Code Online (Sandbox Code Playgroud)

php setter casting type-hinting

4
推荐指数
1
解决办法
1297
查看次数

PHP:Namespace中的Class vs Global函数中的静态方法?

在命名空间中创建全局函数(并从全局命名空间调用它)之间的区别是什么:

<?php
namespace MyNamespace  {
    function MyFunction($x, $y)  {
        return $x + $y;
    }
}

namespace {  //global code... in a new file
   var_dump(MyNamespace\MyFunction(1,2));
}
Run Code Online (Sandbox Code Playgroud)

并创建一个静态类方法,并从全局命名空间调用?:

<?php
class MyClass  {
    public static function MyFunction($x, $y)  {
        return $x + $y;
    }
}

var_dump(MyClass::MyFunction(1,2));
Run Code Online (Sandbox Code Playgroud)

是否有理由更喜欢一种方法而不是另一种方法?

php static namespaces global

4
推荐指数
1
解决办法
950
查看次数

类型提示返回类型时 :self 和 ClassName 之间的区别

在 PHP 中,当我为应该返回类实例的方法指定返回类型时,我可以这样做:

class Foo  {
    public function bar(): self  { ... }
}
Run Code Online (Sandbox Code Playgroud)

或者:

class Foo  {
    public function bar(): Foo  { ... }
}
Run Code Online (Sandbox Code Playgroud)

两者似乎产生相同的结果/行为。

有什么不同?一种最佳实践优于另一种吗?

谢谢。

php return-type type-hinting

4
推荐指数
2
解决办法
1919
查看次数

PHP:在不实例化类的情况下获取所有类属性(公共和私有)的列表

我有一个 POPO(普通旧 PHP 对象):

namespace App\Objects;

class POPO  {
    private $foo;
    private $bar;

    // getters and setters //
}
Run Code Online (Sandbox Code Playgroud)

在其他地方,我有一个(详细信息 - 该类做什么并不重要)类需要知道 POPO 属性的名称。POPO 不会传递到此类中,此类也不实例化 POPO 或关心其属性的值。

class POPODetails  {
    private $POPOclassName = "App\Object\POPO";  //determined programatically elsewhere.

    public getProperties(): array  {
        return get_class_vars($this->POPOClassName);  //this will only return public properties.
    }
}
Run Code Online (Sandbox Code Playgroud)

要使用,get_object_vars我需要传入一个实例化对象,否则我不需要该对象,并且仍然只能获取公共属性。我可以使用ReflectionClass::getProperties(),但还需要传入一个实例化对象。

那么,有没有一种方法可以仅使用完全限定类名来获取类变量列表?

php reflection private-members

3
推荐指数
1
解决办法
2438
查看次数