Stars: 356
Forks: 63
Pull Requests: 9
Issues: 17
Watchers: 21
Last Updated: 2022-05-24 11:40:30
🏺 A minimalist MVC framework.
License: MIT License
Languages: PHP, JavaScript, CSS, Dockerfile, Makefile, SCSS
An MVC framework from scratch in PHP.
Install a local copy with the instructions below, or follow the Docker instructions.
It is assumed you already know how to install a LAMP stack. For macOS and Windows local development, I would recommend downloading MAMP for a sandboxed environment. You can set up virtual hosts as well.
If using MAMP, add MAMP to the PHP command line by adding this line to .bash_profile
.
export PATH=/Applications/MAMP/bin/php/php7.2.1/bin:$PATH
Composer is the standard in PHP for dependency management, class autoloading, and much more.
curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer
Create a virtual host called laconia.server
. The server should point to the /public
directory. Your httpd-vhosts.conf
will look like this:
<VirtualHost *:80>
DocumentRoot "/Users/tania/hosts/laconia/public"
ServerName laconia.server
</VirtualHost>
php bin/install.php
in the root directory to initialize the database.composer install
to autoload classes and configuration.npm i
to install depencencies to use Sass.npm run sass
to run sass.Copy credentials example file to credentials.
cp credentials.example.php credentials.php
Laconia is all set up and ready to use!
make init
to build all containers.make install
to run the install script.npm
and sass
are not integrated in Docker at the moment.
npm i
to install depencencies to use Sass.npm run sass
to run sass.If you change or add a class at anytime, you'll need to re-run the autoload script to re-load the new classes.
composer dump-autoload
The entire program flows through /public/index.php
, and the rest of the project is a directory above public.
laconia/
.git # Git source directory
assets/ # Uncompiled raw SCSS
bin/ # Command line scripts
install.php # Database installation script
config/ # Database credentials, utility helpers, and other configuration
data/ # SQL database files
node_modules/ # Node.js front end dependencies
docker/ # Contains Docker environment variables
public/ # Publicly accessible files
css/ # Compiled, ready-to-use styles
js/ # Compiled, ready-to-use scripts
index.php # Main entry point for the entire application
src/ # PHP source code
app # Router code
controllers/ # Controller classes
models/ # Model classes
views/ # Views
tests/ # Unit tests
vendor/ # Composer files and 3rd party packages
.gitignore # Files to be ignored in the repository
composer.json # Composer dependency file
composer.lock # Composer lockfile
docker-compose.yml # Docker configuration
Dockerfile # Docker configuration
LICENSE # MIT License file
Makefile # Docker instructions
package.json # npm dependency file
package-lock.json # Dependency lockfile
README.md # Brief documentation
Laconia is a simple list-making website. You can register an account, log in, log out, reset your password, create and edit lists, and view public profiles.
/
- Landing page/register
- Register a new user/login
- Log in to user account/dashboard
- Logged in dashboard screen/logout
- Log out of user session/forgot-password
- Get a password reset link/create-password
- Create a new password/users
- View all users/settings
- Edit user settings/lists
- View lists/create
- Create a new list/edit/:list_id
- Edit an existing list/:username
- View public profile/404
- Any not found redirects to 404.Laconia uses PHPUnit for unit testing. Tests will go in the /tests
directory. For now, here is how to run a Hello, World! script.
./vendor/bin/phpunit ./tests/HelloWorldTest
Laconia is a personal project created by Tania Rascia to learn the fundamentals of programming and modern web development from scratch. The main goals of the project are to learn MVC (Model View Controller) architecture, the OOP (Object-Oriented Programming) paradigm, routing, authentication, security, modern development practices, and how to tie it all together to make a functional web app.
Laconia runs on PHP 7.2 and MySQL. It uses Composer to autoload classes, configuration and utility files, as well as future tests through PHPUnit. Node.js is used to compile Sass to CSS via npm scripts. The CSS framework Primitive was used for the design.
Here are some of the concepts I learned while writing this program:
I've used a combination of many tutorials and StackOverflow posts to create this project. These have been the most important.
Please feel free to fork, comment, critique, or submit a pull request.
This project is open source and available under the MIT License.