Home

Awesome

Lassi (Not maintained anymore)

PHP boilerplate for quick projects using Slim Framework and Eloquent database.

Lassi

Lassi is a small PHP boilerplate to use <a href="http://www.slimframework.com/" target="_blank">Slim Framework</a> with <a href="https://github.com/illuminate/database" target="_blank">Eloquent database</a> components – enabling you to quickly start building your PHP projects with an MVC design pattern and datastore in no time.

Warnning: Project is in alpha status. For more see issues tracker.

Installation and Setup

Install with composer create-project command. This will install Lassi and all of it's dependencies i.e. Slim Framework and Eloquent database.

$ composer create-project jabranr/lassi

Configuration

Lassi uses .env files to setup it's configuration. There is such sample file .sample.env packaged with it. Lassi will look for .dev.env, .dist.env or .env respectively at the run time or throws NotFoundException.

Charset & Collation

By default .sample.env file has charset and collation configurations set to UTF-8 mb4 to support various type of characters encoding. You can update it with your own choice, of course. For more on best encoding practices, read Working with UTF-8 at PHP: The Right Way.

Routing

Use the routes.php in root directory to setup routes. You would setup routes as you do in Slim Framework. Afterall it is using Slim Framework in background. For more on setting up routes, see Slim Framework Documentation.

Structure

Controllers: The Controllers are to be saved in controller/ directory. All Controllers must extend Lassi\App\Controller base controller class and pass the LassiLassi instance to its constructor using LassiLassi::getInstance() method. You can also add relevant Model(s) using useModel(string|array $model) method. You can name the controller as you like but do keep up with best practices.

Models: All relevant Models are saved in model/ directory and must extend the Illuminate\Database\Eloquent\Model class. You would use models as you do in Eloquent. For more on setting up models and use other options, see Eloquent database quick start guide.

There is an example controller and model in mentioned directories for you to get started with.

Views: All views/templates are saved in view/ directory.

Assets: All assets are saved in public/ directory.

Example:

Create project

Create a project using Composer create-project command and cd into project directory.

$ composer create-project jabranr/lassi
$ cd path/to/lassi

Update configuration

Update configurations as required in .dev.env file.

Start server

Start the PHP built-in server and navigate browser to http://localhost:8000.

$ php -S localhost:8000 -t public

Setup routes

Add a new route hello in routes.php and try it in browser by navigating to http://localhost:8000/hello

$app->get('/hello', function() use ($app) {
	$app->response->write('Hello World');
});

Add a new route goodbye in routes.php to render a template. Create a new file goodbye.php with basic HTML and save in /view directory.

<!DOCTYPE html>
<html>
	<head>
		<title>Lassi goodbye template</title>
	</head>
	<body>
		<h1>Goodbye!</h1>
	</body>
</html>

Call this template to render directly from a route's definition or by using a Controller.

Directly from a route's definition

$app->get('/goodbye', function() use ($app) {
	return $app->render('goodbye.php');
});

Using a controller

Add a new public method goodbye() to WelcomeController.php in /controller directory.

class WelcomeController extends Lassi\App\Controller {
	...

	public function goodbye() {
		return $this->app->render('goodbye.php');
	}
}

Modify the route's definition to use controller.

$app->get('/goodbye', 'Lassi\Controller\WelcomeController:goodbye');

For complete reference, see Slim Framework documentation

Using Eloquent

To setup any database connection fill in the required information in relevant *.env file.

Setup SQLite database

At minimum it requires an absolute URL to SQLite file and db_driver value set to sqlite.

db_driver	 = sqlite				(Required)
db_name		 = path/to/foo.sqlite	(Required)
db_prefix	 = lassi_				(Optional)

Setup MySQL, SQL, MSSQL or Sybase database

db_driver	 = mysql		(Required)
db_host		 = localhost	(Required)
db_name		 = lassi		(Required)
db_username	 = root			(Required)
db_password	 = p@ssword		(Required)
db_prefix	 = lassi_		(Optional)

Using Eloquent is straight forward after a connection is established. To learn more on how to use Eloquent, see Official Eloquent Documentation.

Create a table using Eloquent

You can use the Illuminate\Database\Capsule\Manager::schema() method to setup database migrations. Here is an example to create a lassi_users table.

class WelcomeController extends Lassi\App\Controller {
	...

	public function makeUserTable() {
		Illuminate\Database\Capsule\Manager::schema()->create('users', function($table) {
			$table->increments('id');
			$table->string('name');
			$table->string('email')->unique();
			$table->timestamps();
		});
	}
}

Calling Lassi\Controller\WelcomeController->makeUserTable() will create a new table in database.

A model can be added to a controller using useModel() method in controller's constructor i.e.

class WelcomeController extends Lassi\App\Controller {
	public function __construct() {
		parent::__construct(LassiLassi::getInstance());
		$this->useModel('user');
	}
}

or it can directly be accessed using Lassi\Model namespace i.e.

class WelcomeController extends Lassi\App\Controller {
	...

	public function create() {
		$user = new Lassi\Model\User;
		$user->name = 'Jabran Rafique';
		$user->email = 'hello@jabran.me';
		$user->save();
	}
}

Getting info from Eloquent and pass it to template.

class WelcomeController extends Lassi\App\Controller {
	...

	public function goodbye() {
		$user = Lassi\Model\User::find(1);
		return $this->app->render('goodbye.php', array('user' => $user));
	}
}

Issue tracking

Please report any issues to repository issue tracker.

Contribution

I would love to get some help and extend this boilerplate further so it can be useful to a vast audience. If you think you can improve the boilerplate then fork the project and submit pull request at your convenience.

License

MIT License © 2015 – 2016 Jabran Rafique (@jabranr) | Contributors