Installing Laravel as a git submodule

There may be a time when we want to have our Laravel installation separate from the rest of our public files. In this case, installing Laravel as a git submodule would be a solution. This will allow us to update our Laravel files through git without touching our application code.

Getting ready

To get started, we should have our development server running as well as have git installed. In the server's web directory, create a myapp directory to hold our files. Installation will all be done in the command line.

How to do it...

To complete this recipe, follow these steps:

  1. In your terminal or command line, navigate to the root of myapp. The first step is to initialize git and download our project files:
    $ git init
    $ git clone git@github.com:laravel/laravel.git
    
  2. Since all we need is the public directory, move to /laravel and delete everything else:
    $ cd laravel
    $ rm –r app bootstrap vendor
    
  3. Then, move back to the root directory, create a framework directory, and add Laravel as a submodule:
    $ cd ..
    $ mkdir framework
    $ cd framework
    $ git init
    $ git submodule add https://github.com/laravel/laravel.git
    
  4. Now we need to run Composer to install the framework:
    php composer.phar install
    
    Tip

    More information about installing Composer can be found at http://getcomposer.org/doc/00-intro.md. The rest of the book will assume we're using composer.phar, but we could also add it globally and simply call it by typing composer.

  5. Now, open /laravel/public/index.php and find the following lines:
    require __DIR__.'/../bootstrap/autoload.php';
    $app = require_once __DIR__.'/../bootstrap/start.php';
    
  6. Change the preceding lines to:
    require __DIR__.'/../../framework/laravel/bootstrap/autoload.php';
    $app = require_once __DIR__.'/../../framework/laravel/bootstrap/start.php';
    

How it works...

For many, simply running git clone would be enough to get their project going. However, since we want to have our framework act as a submodule, we need to separate those files from our project.

First, we download the files from GitHub, and since we don't need any of the framework files, we can delete everything but our public folder. Then, we create our submodule in the framework directory and download everything there. When that's complete, we run composer install to get all our vendor packages installed.

To get the framework connected to our application, we modify /laravel/public/index.php and change the require paths to our framework directory. That will let our application know exactly where the framework files are located.

There's more...

One alternative solution is to move the public directory to our server's root. Then, while updating our index.php file, we'll use __DIR__ . '/../framework/laravel/bootstrap' to include everything correctly.