Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用单个laravel实例的多个项目_Php_Laravel_Laravel 4_Instance_Projects - Fatal编程技术网

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

Php 使用单个laravel实例的多个项目,php,laravel,laravel-4,instance,projects,Php,Laravel,Laravel 4,Instance,Projects,我是拉雷维尔的新手。根据我对这个框架的研究,我发现它对我的项目非常有用。然而,我在定制它以在多个项目中使用Laravel框架的单个实例时遇到了困难。我不想遵循Laravel中可用的多站点方法,即在项目的模型和控制器中使用目录结构,因为我无法在Git中一步推送与项目相关的更改 我想要这样的东西 公共拉威尔框架 (具有公共库和供应商文件。还具有不同项目使用的公共功能) 应用程序/控制器 应用程序/模型 应用程序/视图 卖主 引导 Proj1 (拥有自己的实体,能够使用公共库和公共Laravel框架

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

我想要这样的东西

  • 公共拉威尔框架 (具有公共库和供应商文件。还具有不同项目使用的公共功能)

    应用程序/控制器

    应用程序/模型

    应用程序/视图

    卖主

    引导

  • Proj1 (拥有自己的实体,能够使用公共库和公共Laravel框架中的模型函数)

    应用程序/控制器

    应用程序/模型

    应用程序/视图

    引导

  • 项目2 (拥有自己的实体,能够使用公共库和公共Laravel框架中的模型函数)

    应用程序/控制器

    应用程序/模型

    应用程序/视图

    引导

i、 例如,新项目必须有自己的应用程序目录,并且能够使用通用项目中的模型功能

这将减轻我的任务,并将对我即将开展的项目非常有用。
如果有人能帮我,我会非常感激。

这里没有什么问题需要回答,但总的来说,你想做的是非常可行的

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

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

然而,所有这些都表明,这不是我会做的。您还没有说明为什么要以这种方式构建项目,因此您可能有一个很好的理由,但就我个人而言,我更喜欢将公共库放入它们自己的包中(有助于确保清晰的边界和干净的API),并使用Composer将它们拉入每个项目。

使用名称空间来组织和分离内容 创建PSR-4自动加载条目以按命名空间分隔项目文件:

"psr-4": {
    "App\\Core\\": "app/App/Core",
    "App\\Main\\": "app/App/Main",
    "App\\Project1\\": "app/App/Project1",
    "App\\Project2\\": "app/App/Project2"
},
Route::group(['prefix' => 'project1', 'namespace' => 'App\Project1\Controllers'], function()
{
    Route::get('/', 'HomeController@index');

    Route::get('posts', 'PostsController@index']);
});
您在Core中放置的所有通用项,以及相关项目文件中的所有非通用项

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

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

<?php namespace App\Core\Controllers;

use Controller; // This is the Laravel Controller

class BaseController extends Controller {

}
然后,您的路由可以被分隔(组织)并以名称空间作为前缀:

"psr-4": {
    "App\\Core\\": "app/App/Core",
    "App\\Main\\": "app/App/Main",
    "App\\Project1\\": "app/App/Project1",
    "App\\Project2\\": "app/App/Project2"
},
Route::group(['prefix' => 'project1', 'namespace' => 'App\Project1\Controllers'], function()
{
    Route::get('/', 'HomeController@index');

    Route::get('posts', 'PostsController@index']);
});
提供这些URL:

http://yourdomain.com/project1
http://yourdomain.com/project1/posts
并将操作指向这些控制器操作:

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

这是非常好的里贝罗先生。请告诉我如何处理每个应用程序的路由?我只需要将它们包含在core routes.php中,对吗?再次感谢。这也是一个关于如何避免模块的好例子。虽然这是可以做到的(而且这绝对不是一个糟糕的方法——我真的很喜欢),但要保持项目之间的奇异性需要做更多的工作。当您有一个项目的速度比其他项目快,并且需要升级各种组件,但可能会影响其他项目的功能时,问题就开始了。根据我的经验,从长远来看,为每个“项目”创建一个新的Laravel项目并将您的组件作为模块提供要简单、干净和安全得多。如果您遵循Ribeito先生的选项,您可以将您的项目文件夹添加到主应用程序的.gitignore中,并为每个项目创建一个单独的git。我也在考虑这样做。我已经通过composer安装了laravel。然后我创建了另一个应用程序,将上一个项目的所有文件复制到另一个文件夹中。后来,我尝试添加干预/包,得到了Image类not found错误。我意识到这可能已经添加到原来的laravel项目文件夹中,而不是我目前正在处理的文件夹中。你建议做什么?
App\Project1\Controllers\HomeController@index
App\Project1\Controllers\PostsController@index