使用单个laravel实例的多个项目

问题描述 投票:10回答:2

我是Laravel的新手。根据我对这个框架的研究,我发现它对我的项目非常有用。但是我在定制它时遇到了困难,因为Laravel框架的单个实例用于多个项目。我不想遵循Laravel中提供的多站点方法,即在项目的模型和控制器中使用目录结构,因为我无法在Git中的一个步骤中推送与项目相关的更改。

我想要这样的东西。

  • 常见的Laravel框架(具有通用库和供应商文件。还具有不同项目使用的通用功能) 应用程序/控制器 应用程序/模型 应用程序/意见 供应商 引导
  • Proj1(拥有自己的实体,能够使用常见Laravel框架中的公共库和模型函数) 应用程序/控制器 应用程序/模型 应用程序/意见 引导
  • Proj2(拥有自己的实体,能够使用常见Laravel框架中的公共库和模型函数) 应用程序/控制器 应用程序/模型 应用程序/意见 引导

即,新项目必须有自己的应用程序目录,并且能够使用常见项目中的模型函数。

这将简化我的任务,对我即将开展的项目非常有用。如果有人可以帮助我,我会非常感激。

php laravel laravel-4 instance projects
2个回答
18
投票

Use Namespaces To Organize and Separate Things

创建PSR-4自动加载条目以按名称空间分隔项目文件:

"psr-4": {
    "App\\Core\\": "app/App/Core",
    "App\\Main\\": "app/App/Main",
    "App\\Project1\\": "app/App/Project1",
    "App\\Project2\\": "app/App/Project2"
},

你在Core中常见的一切,在相关的项目文件中都不常见。

现在您只需要在他们各自的文件夹中创建文件并命名它们:

这是Core中的BaseController,由您的所有控制器使用:

<?php namespace App\Core\Controllers;

use Controller; // This is the Laravel Controller

class BaseController extends Controller {

}

这是使用您的核心控制器的主应用程序的BaseController:

<?php namespace App\Main\Controllers;

use App\Core\Controllers\BaseController as CoreBaseController;

class BaseController extends CoreBaseController {

}

这是使用其基本控制器的Main应用程序的HomeController,因为它们位于您甚至不需要导入文件的同一名称空间中:

<?php namespace App\Main\Controllers;

class HomeController extends BaseController {

}

Laravel中的每个单独的类文件都可以这样组织,甚至是您的视图,因此您可以拥有这些文件:

app/App/Core/Controllers/BaseController.php

app/App/Main/Controllers/BaseController.php
app/App/Main/Controllers/HomeController.php

app/App/Project1/Controllers/BaseController.php
app/App/Project1/Controllers/PostsController.php
app/App/Project1/Controllers/UsersController.php

app/App/Project1/Models/User.php
app/App/Project1/Models/Post.php
app/App/Project1/Models/Roles.php

然后您的路线可以分开(组织)并以命名空间为前缀:

Route::group(['prefix' => 'project1', 'namespace' => 'App\Project1\Controllers'], function()
{
    Route::get('/', 'HomeController@index');

    Route::get('posts', 'PostsController@index']);
});

给那些网址:

http://yourdomain.com/project1
http://yourdomain.com/project1/posts

并将操作指向这些控制器操作:

App\Project1\Controllers\HomeController@index
App\Project1\Controllers\PostsController@index  

0
投票

这里没有一个问题需要回答,但总的来说,你想做的事情是非常可行的。

您可以在apps文件夹下为每个项目创建一个目录,并为您在其下创建的结构中的每个类命名。然后,您可以使用PSR(理想情况下为PSR-4)自动加载来使这些类可访问。

您将每个项目的路由放在他们自己的路径文件中,然后通过主路径文件包含它们,或者您可以为每个项目创建一个服务提供者,将其添加到您的应用程序配置文件中并使用它来加载路径项目。

然而,所有这一切,这不是我会做的。您还没有说过为什么要以这种方式构建项目,所以您可能有充分的理由,但我个人更喜欢将公共库放入自己的包中(有助于确保清晰的边界和干净的apis)并使用Composer把它们拉进每个项目。

© www.soinside.com 2019 - 2024. All rights reserved.