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