2013-06-06 3 views
2

первую очередь я новичок в IoC, ServiceProviders и Фасады, но я предполагаю, что ответ лежит в тех, для следующих действий:Расширения Laravel 4 Красноречивых моделей внутри пакетов

Что бы лучший путь к расширяйте модели Eloquent изнутри пакетов (возможно, есть больше, чем один правильный путь, но, пожалуйста, поделитесь своими). Вот структура приложения, которое у меня запланировано:

L4 framework + два отдельных пакета (CMS & CRM), которым необходимо поделиться некоторыми черными моделями. Тем не менее, могут быть конкретные случаи пакета, в которых пакет должен расширить модель Eloquent, которая используется обоими, и я не хотел бы касаться базовой модели.

Я также планирую использовать отдельные контроллеры и представления для каждого пакета (если только что-то не будет одинаковым для всех пакетов). Вид мастера будет загружен из папки L4-views. Правильно ли это звучит? (По крайней мере, я играл с отдельными контроллерами и представлениями уже, и они отлично работали.)

Причина, по которой я хочу пойти с подходом к пакету, заключается в том, что я хочу, чтобы CRM CMS & был независимым кодом и структурным образом, чтобы они может быть легко установлена ​​& удалено & обновлено с помощью композитора.

Я был бы в восторге от любых предложений по достижению всего этого. Кроме того, если это вообще не имеет никакого смысла, дайте мне знать, и я попытаюсь разъяснить себя :)

Приветствия!

+0

вы строящей CM S & CRM как два автономных приложения? Вы можете сделать свой собственный небольшой класс, который расширяет Eloquent, и отправить его в packagist, а затем добавить его в ваш composer.json –

+0

Да, и нет :) Идея в том, что они могут работать в одиночку и вместе, но в рамках одной и той же установки Laravel. В настоящее время я изучаю больше о IoC и Facades для достижения наилучших результатов. Спасибо за ваш комментарий! –

ответ

3

Если создать пакет в пределах Laravel 4, то вы должны быть в состоянии сделать что-то вроде этого:

<?php 

use Illuminate\Database\Eloquent\Model; 

class YourModel extends Model { 

    // Your code here 
} 

Примечания: Я был немного не уверен в хотели ли вы продлить красноречивый или модель, созданную самостоятельно что расширяет красноречие?

+2

Спасибо за ваш ответ! Я понял, что мой вопрос достаточно широк, чтобы ответить на него полностью, и ему, скорее всего, понадобится полный учебник по этой теме. На данный момент я нахожусь в точке, где у меня есть отдельные пакеты и модели, которые расширяют ядро, именно так, как я их хочу.Я приму ваш ответ, поскольку он решает мой первоначальный вопрос :) Еще одним ключом к достижению использования пакета было пространство имен, которое я раньше не использовал. –

1

В соответствии с вашими комментариями, приведенными выше, я бы назвал правильный вариант ответа, поскольку ваши модели будут работать совместно, и имеет смысл иметь их в одной и той же установке, а не в отдельных пакетах. Вот пример:

в /app/models/Entities/CRM/UserEntity.php

<?php namespace Project\Models\Entities\CRM; 

use Eloquent; 

Class User extends Eloquent { 
    ... 
    public function owner() 
    { 
     return $this->belongsTo('Project\Models\Entities\CMS\User'); 
    } 
} 

в /app/models/Entities/CMS/UserEntity.php

<?php namespace Project\Models\Entities\CMS; 

use Eloquent; 

Class User extends Eloquent { 
    ... 
    public function contacts() 
    { 
     return $this->hasMany('Project\Models\Entities\CRM\User'); 
    } 
} 

Не Отметим, что вы должны заполнить пространство имен Models в вашем composer.json

{ 
    ... 
    "autoload":{ 
     "psr-0": { "Project\\Models": "app/models/" } 
    } 
} 
+1

Hi Mulkave, это очень близко к тому, что я сделал для достижения того, что я хотел. Спасибо за ваш ответ! –

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