我正在使用Laravel 4制作一个Web应用程序,在此应用程序中我有一些文章。每篇文章都有多个图片。现在,当我要删除一篇文章时,我还必须删除属于该文章的图像。我想知道应该在哪里放置Image delete方法。我可以将其放在商品控制器,图像控制器或图像模型中。
由于我还必须能够在不触摸文章的情况下单独删除图像,因此让文章控制器删除文件没有任何意义。那么放在哪里呢?图片模型还是图片控制器?我认为是图像模型。
编辑:我使用Laravel ORM,所有文章都链接到其图像。删除一篇文章也会从数据库中删除所有图像。我只是想知道从文件系统中删除的位置。
首先,模型是一个层。它不是多元的-您可以在此处了解更多信息:php-在MVC中应如何构建模型?。
如果您使用的是MySQL数据库,则可以查看ON CASCADE DELETE
-它将删除数据库中与本文相关的所有图像。如果您不想在db端执行此操作,则可以查看Entity \ Repository模式,这可以通过使用像Doctrine这样的ORM轻松实现。这将允许您为php端版本的注释“实体”(具有类成员,属性和一些getter / setter的域对象)ON CASCADE DELETE
。
您的控制器不应执行任何业务逻辑。在模型层中执行此操作-这意味着您的控制器将仅调用方法并从模型层获取响应。
总之,可以在数据库中或通过ORM的注释(例如,学说)将您的文章和图像(实体)链接起来,这样,当您删除一个文章和图像(实体)时,其他的也会被删除。
最后,如果这对您来说太多了,请在执行文章(实体)的删除(存储库)时,放置代码以删除图像在同一文件中。
添加:如果图像路径未存储在数据库中,并且您确实要删除物理文件,则您应该编写一个具有处理文件删除责任的外部服务(类)。然后,删除文章的代码将调出该服务。这意味着您的代码将更具测试性,并且您可以引发自定义异常来确定出了点问题(例如无法删除图像)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句