Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up

🏺 ‎ A minimalist MVC framework.

License

NotificationsYou must be signed in to change notification settings

taniarascia/laconia

Repository files navigation

License: MIT

An MVC framework from scratch in PHP.

Installation

Install a local copy with the instructions below, or follow theDocker instructions.

Install Apache, MySQL, and PHP

It is assumed you already know how to install a LAMP stack. For macOS and Windows local development, I would recommend downloadingMAMP for a sandboxed environment. You canset 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

Install Composer

Composer is the standard in PHP for dependency management, class autoloading, and much more.

curl -sS https://getcomposer.org/installer| phpsudo mv composer.phar /usr/local/bin/composer

Set up server

Create a virtual host calledlaconia.server. The server should point to the/public directory. Yourhttpd-vhosts.conf will look like this:

<VirtualHost*:80>DocumentRoot "/Users/tania/hosts/laconia/public"ServerName laconia.server</VirtualHost>

Run install script

  • Runphp bin/install.php in the root directory to initialize the database.
  • Runcomposer install to autoload classes and configuration.
  • Runnpm i to install depencencies to use Sass.
  • Runnpm 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!

Docker Instructions

  • Runmake init to build all containers.
  • Runmake install to run the install script.

npm andsass are not integrated in Docker at the moment.

  • Runnpm i to install depencencies to use Sass.
  • Runnpm run sass to run sass.

Autoload classes

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

Project Structure

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

Usage

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.

Testing

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

Motivation

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 frameworkPrimitive was used for the design.

Here are some of the concepts I learned while writing this program:

  • Authentication – logging in, logging out, resetting a password, having private content/dashboard hidden from anonymous users
  • Security and validation – encrypted passwords and hashing, parameter binding with SQL, making sure users cannot be overridden, making sure no spam or empty content can go through, making sure passwords and usernames have the proper characters
  • Routing – Redirecting to URLs based on incoming request method and URI path, creating public user profiles in the root directory, creating dynamic pages based on GET requests
  • Object-oriented programming – I had never used a class in a working application before writing this app, so I learned a lot about constructors, inheritance, and abstract classes
  • Composer – I had no prior experience using Composer, so I wanted to find out why it was the standard in modern PHP development. I used it for autoloading classes and configuration.
  • Database schema – how to structure a database to relate information easily between the tables, i.e. linking lists and list items, users and user comments, etc.Sessions and Users – how to easily deal with sessions, users, and authentication.

Acknowledgements

I've used a combination of many tutorials and StackOverflow posts to create this project. These have been the most important.

Contributing

Please feel free to fork, comment, critique, or submit a pull request.

Author

License

This project is open source and available under theMIT License.


[8]ページ先頭

©2009-2025 Movatter.jp