我是Symfony的新手,我来自一个MVC框架,那里只有一个Model类,但是据我所知,在Symfony中,我们有2个(实体和存储库)
因此,我不确定何时将方法放入Entity类中以及何时将其放入存储库中...
例如:
$user->logLogin()
Run Code Online (Sandbox Code Playgroud)
哪个将用户登录名(时间戳,ip,国家/地区,用户代理等)记录到log_logins表中,并从登录事件侦听器中调用它,该在哪里去?(由于不需要操纵该表上的数据,因此我不会创建UserLogins实体,这只是一些只读信息)
这可能不会立即显现出来,但是在Symfony中,您可以通过服务做事。登录方法既不属于实体也不属于存储库。
总体思路如下:
典型的控制器会调用一些服务,通常不直接接触存储库(或Doctrine)。
在许多示例中,为了尽可能简单和简短,将这些层中的一些切掉了,这种结构并不明显。
注意:Symfony具有丰富的登录系统,该系统已经连接到其多个组件,您可能会在不重新实现一个新组件的情况下使用它。我建议看看。
实体和存储库是两个完全不同的东西。存储库不是模型。该实体代表您的模型。存储库与数据库接口。您以前的框架很可能使用主动记录方法,而不是 Doctrine 2 使用的数据映射器方法。这需要一些重新思考。
为了回答您的问题,logLogin 会更新数据库,因此它不仅会进入存储库,而且无法进入实体,原因很简单,实体没有与数据库的连接。
因此,您可以将存储库注入到您的侦听器中,然后,当登录事件发生时,您可以执行以下操作:
$this->userRepository->logLogin($user);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2543 次 |
| 最近记录: |