Multiple Projects using single laravel instance

前端 未结 2 466
被撕碎了的回忆
被撕碎了的回忆 2021-02-01 10:23

I am new to Laravel. As per my research on this framework I find it quite useful for my projects. However I am facing difficulty in customizing it to use a single instance of La

相关标签:
2条回答
  • 2021-02-01 10:50

    There's not really a question here to be answered, but in general terms what you want to do is very feasible.

    You could create a directory under the apps folder for each project and namespace each of the classes in the structure you create below it. You'd then use PSR (ideally PSR-4) autoloading to make these classes accessible.

    You'd put the routes for each project in their own routes file and then include them through the main routes file, or you could create a service provider for each project, add it your app config file and use that to load the routes for that project.

    HOWEVER, all that said, this isn't what I would do. You haven't said why you want to structure your projects this way, so you may have a perfectly good reason, but personally I prefer to put common libraries into their own packages (helps to ensure clear boundaries and clean apis) and use Composer to pull them into each project.

    0 讨论(0)
  • 2021-02-01 10:53

    Use Namespaces To Organize and Separate Things

    Create PSR-4 autoloading entries to separate your projects files by namespace:

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

    Everything common you put in Core, everything non-common in the related project files.

    Now you just have to create your files in theirs respective folders and namespace them:

    This is a BaseController in Core, used by all your controllers:

    <?php namespace App\Core\Controllers;
    
    use Controller; // This is the Laravel Controller
    
    class BaseController extends Controller {
    
    }
    

    This is a BaseController of the Main application using your Core Controller:

    <?php namespace App\Main\Controllers;
    
    use App\Core\Controllers\BaseController as CoreBaseController;
    
    class BaseController extends CoreBaseController {
    
    }
    

    And this is a HomeController of the Main application using your its Base Controller, as they are in the same namespace you don't even need to import the file:

    <?php namespace App\Main\Controllers;
    
    class HomeController extends BaseController {
    
    }
    

    Every single class file in Laravel can be organized this way, even your views, so you can have those files:

    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
    

    Then your routes could be separated (organized) and prefixed by namespace:

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

    Giving those urls:

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

    And pointing actions to those controller actions:

    App\Project1\Controllers\HomeController@index
    App\Project1\Controllers\PostsController@index  
    
    0 讨论(0)
提交回复
热议问题