Symfony 从实体类访问generateURL()
我想在实体类中访问generateUrl。您可以在控制器类中访问generateUrl,如下所示:Symfony 从实体类访问generateURL(),symfony,Symfony,我想在实体类中访问generateUrl。您可以在控制器类中访问generateUrl,如下所示: $url = $this->generateUrl('your_route_name', array(/* parameters */)); 为此,我应该尝试“创建一个服务,并在其中注入路由器组件”。然后我正在阅读并尝试配置,但我仍然无法完成 在app/config/config.yml中 services: router: class: ??? a
$url = $this->generateUrl('your_route_name', array(/* parameters */));
为此,我应该尝试“创建一个服务,并在其中注入路由器组件”。然后我正在阅读并尝试配置,但我仍然无法完成
在app/config/config.yml中
services:
router:
class: ???
arguments: ???
如何使路由器成为服务
更新
为什么要在实体类中使用generateUrl
我正在使用。它需要在实体中实现getFeedItemLink()。我需要将URL作为该函数的返回值。简单的回答是:您不在实体内部使用路由器,也不将实体创建为服务。您应该创建一个单独的服务,负责创建URL(如果您写了更多关于您试图实现的内容,那么给您提供更合适的示例会更简单) 例如:
use Symfony\Bundle\FrameworkBundle\Routing\Router;
class YourCustomUrlGenerator
{
private $router;
public function __construct(Router $router)
{
$this->router = $router;
}
public function generateUrl(YourEntity $entity)
{
// generate the url
}
}
然后定义您的DIC服务:
services:
custorm_url_generator:
class: Namespace\YourCustomUrlGenerator
arguments: [@router]
它在实体内不可用,因为你不应该在实体内使用它,你想做什么?@ra_htial“你不应该质疑上帝,也不应该质疑国王说什么”好吧。。。为什么?然后你得到2张赞成票。好极了@Toskan因为有规则,如果你不遵守,事情迟早会破裂,提问是好的,这就是为什么我问他想做什么,也许我可以用更好的方法来帮助他。不,我不是想让实体成为服务。我想让路由器成为一种服务,然后在实体类中使用它。在实体中不使用服务。真糟糕!路由器是一项服务,你不需要让它成为一项。我完全同意。正如@IgorPantović所说的,您不应该让servce==entity,您不应该在实体内部使用服务。如果您需要一个基于实体创建url的方法,您可以创建单独的服务(不是实体)并将此方法放在那里。然后可以将实体作为参数传递到此方法中。这样,您就可以实现您想要的,而无需将任何服务放在实体中。开玩笑的是,我没有回答,我只是发表了评论。实体是不应该测试的数据对象,因此将业务逻辑放入其中是一个坏主意。此外,它们将在代码中的不同位置实例化,如果它们需要访问服务,那么您将需要在所有这些位置访问这些服务,从而使代码更耦合,更不易维护。它违反了SRP(但该死,activerecord也违反了,而且大多数人都不介意),所以这是否不好还是有争议的。工厂模式在这里使用是正确的。