Php 如何通过repository模式和Laravel';他口若悬河
好吧,就这么定了。我正在使用定制的CMS,我希望代码尽可能优化。我一直在阅读/观看tuts/等等,对存储库模式非常感兴趣,尤其是与Laravel的雄辩结合使用。这里可能有一些非常愚蠢的问题/想法,但请耐心听我说。:-)有时,询问术语/最佳实践时,很难不显得愚蠢 和许多事情一样,我有无数种方法可以“让它工作”;我的困境本质上是一个“最佳实践”问题 一般情景/问题 假设我正试图从数据库中获取我的CMS的页面。据我所知,使用Eloquent设置Php 如何通过repository模式和Laravel';他口若悬河,php,laravel,laravel-4,eloquent,repository-pattern,Php,Laravel,Laravel 4,Eloquent,Repository Pattern,好吧,就这么定了。我正在使用定制的CMS,我希望代码尽可能优化。我一直在阅读/观看tuts/等等,对存储库模式非常感兴趣,尤其是与Laravel的雄辩结合使用。这里可能有一些非常愚蠢的问题/想法,但请耐心听我说。:-)有时,询问术语/最佳实践时,很难不显得愚蠢 和许多事情一样,我有无数种方法可以“让它工作”;我的困境本质上是一个“最佳实践”问题 一般情景/问题 假设我正试图从数据库中获取我的CMS的页面。据我所知,使用Eloquent设置存储库模式的典型方法是拥有以下文件: php——雄辩的模
存储库模式的典型方法是拥有以下文件:
- php——雄辩的模型
- PageRepositoryInterface.php——PageRepo中应该包含的内容的“合同”
- EloquentPageRespository.php——可以通过Eloquent抓取数据的页面存储库
很简单。所以我可以这样用。假设我在EloquentPageRepository.php
中有一个getPageById
方法,我可以从我的控制器中执行类似的操作:
$page = $this->repo->getPageById();
现在我的问题出现了:getPageById()应该返回什么类型的数据?有些人建议将其设置为返回有说服力的收藏。另一些人说,只是一个普通数组或通用对象
理想情况下,我觉得我的场景最适合让EloquentPageRepository
从Eloquent获取数据,并实际返回我拥有的自定义页面类的实例。例如,大致如下:
<?php namespace Acme\Repositories\EloquentPageRepository;
use Acme\...\PageObject as PageObject; // Better name than PageObject?
//...
class EloquentPageRepository implements PageRepositoryInterface {
// Omitting constructor, etc.
public function getPageById($id)
{
// Grab the row via Eloquent (obviously not stored in Page:: at
// this point. I'm just using it here for clarity and time's sake.
$page = Page::find($id);
// Now we have an Eloquent collection stored in $page, but I'd
// like to return the data inside an instance of my custom class.
$pageObj = new PageObject($page->title, $page->body);
return $pageObj;
}
}
这完全取决于您对存储库模式的期望。您是否正在使用存储库模式,因为将来您将切换到数据层,并且需要一个新的存储库。如果在cms有效期内使用Eloquent,则可以返回一个Eloquent对象。如果您希望它非常灵活,那么创建一个新的页面对象(如注释中提到的PageComposer)。这是存储库模式的优点之一,因此我建议您创建一个PageComposer类,由存储库实例化并返回
通常你可以称之为页面,因为它是一个页面,并且它提供了页面的一些信息。但你已经给这个能言善辩的模特起了个名字。您可以考虑更改雄辩模型名称并调用返回对象页面。
页面
实际上听起来像一个视图生成器,因此它可能是一个页面生成器
,可以很容易地将页面包含的任何内容绑定到视图。你只需将你需要的所有信息传递到构造器中,它就可以让你的应用程序完整运行?这是一个非常有趣的想法!我将对此进行进一步研究。Composer建议它创建一个页面。但是页面对象根本没有创建页面。