2014-10-06 122 views
2

我用Laravel编写了一个REST API。最重要的是,我想创建一个管理面板,其中包含大量的统计数据和应该在服务器端呈现的“强大”管理工具。 尽管REST API使用OAuth2.0并仅返回JSON + HAL(HATEOAS),但管理面板将使用HTTP基本身份验证以及基于会话的身份验证的普通凭证登录。Laravel:从第二个Laravel应用程序扩展模型

我知道使用第二个认证过滤器和路由组很容易就可以在一个应用程序中完成所有这些工作。而且我知道只有在需要时才加载库。但是我想创建一个完全独立的第二个应用程序。

为什么? 保持REST API的轻量级:没有不必要的库,没有第二个auth层,没有额外的路由,规则和过滤器等等。REST API是Restful的,我不想添加额外的混乱。虽然它可能会使测试更复杂一点。

这是应该的样子:

后端

  • 休息(Laravel应用1)

- 应用

---模型

--- - RestapiModel.php

  • 管理(Laravel应用2)

- 应用

---模型

---- AdminModel.php

问题是:在应用程序2我需要与应用程序的模型1 所以我想做s.th.像

class AdminModel extends RestapiModel { 

    protected $connection = 'application_1_database'; 

    // Statistical methods 
    // Database manipulation 
    // etc. 
} 

我现在有两个问题:

  1. 我怎样才能实现这一目标? “AdminModel扩展RestapiModel”不起作用。我必须使用命名空间,特征还是只包含文件顶部的模型?你会如何解决这个问题?

  2. 您如何看待分离API和管理的完整方法?

在此先感谢

菲尔

+0

想不出管理部分刚刚与API交互,以及(改变自动加载部分中,确保运行composer dump-autoload后)?然后你有一个'接口'到你的应用程序... – Laurence 2014-10-06 09:46:57

+0

这也会给控制器添加很多混乱因为我不得不向控制器添加权限或角色层,因为管理员比普通客户拥有更多权限和可能性。当然,对于一些正常的方法它会起作用。但它也会使得难以区分管理功能和“正常”功能。但说实话,我只是不喜欢在同一个地方拥有行政职能和客户端功能。只是一种直觉,它会让模型和控制器变得非常大。 – pz90 2014-10-06 09:50:03

回答

0

它不漂亮,但你可以用require要导入的文件(S)

require base_path().`/../rest/models/RestapiModel.php`; 

class AdminModel extends RestapiModel { 

    protected $connection = 'application_1_database'; 

    // Statistical methods 
    // Database manipulation 
    // etc. 
} 

或者你可以autload的所有型号休息api使用作曲家。您composer.json在管理应用程序看起来是这样的:

// ... 
"autoload": { 
    "classmap": [ 
     "app/commands", 
     "app/controllers", 
     "app/models", 
     "../../rest/app/models", 
     "app/database/migrations", 
     // ... 
    ] 
}, 
// ...