2014-02-10 8 views
6

Я пытаюсь следовать шаблону репозитория, изложенному в этой статье http://code.tutsplus.com/tutorials/the-repository-design-pattern--net-35804#highlighter_174798 И я пытаюсь создать экземпляр класса в Laravel, используя App :: make() (который я я предполагаю, что это фабричный шаблон Laravel?), и я пытаюсь разобрать аргументы для своего класса, но я не могу понять, как это сделать.Laravel 4: Confused о том, как использовать App :: make()

Код:

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); 

Может кто-нибудь указывает на пример того, как использовать App :: сделать() или я пошел в совершенно неправильном направлении и не должны использовать App :: сделать()?

ответ

4

Хорошие люди в форуме 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'); 
7

App на самом деле является фасадом для контейнера Laravel IoC, который обычно используется для автоматического разрешения. Понимание концепции IoC имеет жизненно важное значение для комплексной разработки приложений, но небольшие проекты наверняка извлекут выгоду из хорошо продуманной архитектуры. Я бы рекомендовал сначала погрузиться в Laravel documentation и попробовать несколько примеров для поставщиков услуг, привязок и автоматического разрешения.

Говоря о вашем примере:

namespace My; 

class NewClass { 

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


$newClass = App::make('My\NewClass', [1, 'test']); 
+0

Я просмотрел документацию, прежде чем задавать вопрос. Можете ли вы предоставить какую-либо информацию более непосредственно в ответ на мой вопрос? –

+0

Спасибо за ваш ответ. Таким образом, вы не будете использовать App :: make() для передачи массива аргументов, потому что это, по-видимому, функциональность View :: make ('SomeView', $ args); –

+0

Несомненно. Я бы сказал, что это больше для структурирования приложения и добавления некоторого уровня абстракции. Например, я использую его для разрешения интерфейсов (связанных с поставщиком услуг). 'App :: сделать ('My \ ClassInterface');' – cheelahim

Смежные вопросы