Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/244.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何通过repository模式和Laravel';他口若悬河_Php_Laravel_Laravel 4_Eloquent_Repository Pattern - Fatal编程技术网

Php 如何通过repository模式和Laravel';他口若悬河

Php 如何通过repository模式和Laravel';他口若悬河,php,laravel,laravel-4,eloquent,repository-pattern,Php,Laravel,Laravel 4,Eloquent,Repository Pattern,好吧,就这么定了。我正在使用定制的CMS,我希望代码尽可能优化。我一直在阅读/观看tuts/等等,对存储库模式非常感兴趣,尤其是与Laravel的雄辩结合使用。这里可能有一些非常愚蠢的问题/想法,但请耐心听我说。:-)有时,询问术语/最佳实践时,很难不显得愚蠢 和许多事情一样,我有无数种方法可以“让它工作”;我的困境本质上是一个“最佳实践”问题 一般情景/问题 假设我正试图从数据库中获取我的CMS的页面。据我所知,使用Eloquent设置存储库模式的典型方法是拥有以下文件: php——雄辩的模

好吧,就这么定了。我正在使用定制的CMS,我希望代码尽可能优化。我一直在阅读/观看tuts/等等,对存储库模式非常感兴趣,尤其是与Laravel的雄辩结合使用。这里可能有一些非常愚蠢的问题/想法,但请耐心听我说。:-)有时,询问术语/最佳实践时,很难不显得愚蠢

和许多事情一样,我有无数种方法可以“让它工作”;我的困境本质上是一个“最佳实践”问题

一般情景/问题

假设我正试图从数据库中获取我的CMS的页面。据我所知,使用Eloquent设置
存储库模式的典型方法是拥有以下文件:

  • 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建议它创建一个页面。但是页面对象根本没有创建页面。