我是Laravel的新手。根据我对这个框架的研究,我发现它对我的项目非常有用。但是我在定制它时遇到了困难,因为Laravel框架的单个实例用于多个项目。我不想遵循Laravel中提供的多站点方法,即在项目的模型和控制器中使用目录结构,因为我无法在Git的一个步骤中推送与项目相关的更改。
我想要这样的东西。
常见的Laravel框架 (具有公共库和供应商文件。还具有不同项目使用的通用功能)
应用程序/控制器
应用程序/模型
应用程序/观点
供应商
自举
Proj1 (拥有自己的实体,并且能够使用常见Laravel框架中的公共库和模型函数)
应用程序/控制器
应用程序/模型
应用程序/观点
自举
Proj2 (拥有自己的实体,并且能够使用常见Laravel框架中的公共库和模型函数)
应用程序/控制器
应用程序/模型
应用程序/观点
自举
即,新项目必须有自己的app目录,并且能够使用普通项目中的模型函数。
这将简化我的任务,对我即将开展的项目非常有用。 如果有人能帮助我,我真的很感激。
答案 0 :(得分:18)
创建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 {
}
这是使用其基本控制器的主应用程序的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
答案 1 :(得分:0)
这里不是一个真正需要回答的问题,但总的来说,你想做的事情是非常可行的。
您可以在apps文件夹下为每个项目创建一个目录,并为您在其下创建的结构中的每个类命名。然后,您可以使用PSR(理想情况下为PSR-4)自动加载来使这些类可以访问。
您将每个项目的路线放在他们自己的路线文件中,然后通过主路线文件包含它们,或者您可以为每个项目创建一个服务提供商,将其添加到您的应用配置文件并使用它来加载该项目的路线。
但是,所有这些都说,这不是我要做的。您还没有说过为什么要以这种方式构建项目,所以您可能有一个很好的理由,但我个人更喜欢将公共库放入自己的包中(有助于确保清晰的边界和干净的apis)并使用作曲家将他们带入每个项目。