Laravel 4:对如何使用App :: make()感到困惑

The*_*lis 8 php factory-pattern laravel laravel-4

我正在尝试遵循本文中概述的存储库模式http://code.tutsplus.com/tutorials/the-repository-design-pattern--net-35804#highlighter_174798我正在尝试使用App在Laravel中实例化一个类:: make()(我猜是Laravel的工厂模式?)我试图解析我的课程的参数,但我无法弄清楚如何做到这一点.

码:

namespace My;

class NewClass {
    function __construct($id, $title) 
    {
        $this->id = $id;
        $this->title = $title;
    }
}

$classArgs = [
    'id'    => 1,
    'title' => 'test',
]

$newClass = App::make('My\NewClass', $classArgs);
Run Code Online (Sandbox Code Playgroud)

任何人都可以指出如何使用App :: make()的例子,或者我是否走错了方向,不应该使用App :: make()?

che*_*him 7

App实际上是Laravel IoC容器的外观,通常用于自动解析.了解IoC概念对于复杂的应用程序开发至关重要,但小型项目肯定会受益于良好的架构.我建议首先深入了解Laravel 文档并尝试一些关于服务提供商,绑定和自动解决方案的示例.

说到你的例子:

namespace My;

class NewClass {

    function __construct($id, $title) 
    {
        $this->id    = $id;
        $this->title = $title;
    }
}


$newClass = App::make('My\NewClass', [1, 'test']);
Run Code Online (Sandbox Code Playgroud)


The*_*lis 5

Laravel论坛上的好人为我解答了这个问题http://laravel.io/forum/02-10-2014-laravel-4-confused-about-how-to-use-appmake

几乎如果你可以使用App :: bind()绑定自定义实例化代码; 像这样

App::bind('My\NewClass', function() use ($classArgs) {
    return new My\NewClass($classArgs['id'], $classArgs['title']);
});

// get the binding
$newClass = App::make('My\NewClass');
Run Code Online (Sandbox Code Playgroud)