This is a PHP Framework made by Shawn D'silva to learn MVC Architecture, SQL based CRUD and AJAX from scratch using Linux, Apache, MySQL and PHP , No JavaScript or PHP Frameworks used and neither are any PHP packages or libraries, The Front-End for the demo app is made with with custom CSS & JQuery.
This Project supports Docker and is deployed in Docker containers, The Docker deployment consists of a MySQL container with an Apache2 server + PHP7.2 apache mod, which runs the web app.
- You need
dockeranddocker-composefor this. - Run
docker-compose up - Site is hosted on
localhost:5003by default.
- Entry point for the web app is in
index.phpwhich lives in thepublicfolder, which also contains.cssand.jsin their respective folders - PHP application code goes in
appwhich containscontrollers,views,modelsandroutes. - The core Framework PHP code is in
corewhich contains thedatabase,sessions,router,middlewares,utilsand basecontrollerandmodelslogic - Application controllers and models inherit from
controllerandmodelsincorewhich encapsulte the parameter or middleware data for controllers from the routes or expose the database functions and Query Builder for the models
- Created using only pure PHP, no frameworks or external libraries.
- MVC CRUD App with AJAX features where required
- Router with support for parameterized dynamic routes and protected routes.
- Route parameters can be accessed in controller, so can the data output by Middlewares
- Sessions based authentication, with only sessionId stored in cookie, and user data stored in database.
- Validation library to check user input.
- Middleware support for specific routes.
- Database abstraction using a Query Builder for MySQL.
- Skeleton files and directory setup
- Basic router setup with controllers and views
- Creating core Model methods
- Login/Registration functionality
- Sessions setup
- Redirects based on Auth status stored in Session cookie/ Protected Routes
- Store user data upon login into sessions database and return sessionId
- Store sessionId cookie.
- Get and display user data from sessions table by verifying sessionId with database.
- Session deletion upon Logout.
- Input sanitization/validation for Login and Registration
- Error Message display using AJAX In the same page.
- Login refactor into AJAX.
- Registration refactor into AJAX.
- JavaScript refactor from script tags to
.jsfiles. - Modify Router so it can work even with parameterized/dynamic routes.
- Get username from route parameter, retreive user data, and display it.
- Add functionality for users to add blog posts
- List of Posts by a user in his dashboard
- Add Posts refactor into AJAX
- Get Posts refactor into AJAX
- Add Delete functionality for Posts
- Get Single Post and Display it
- Add Edit functionality for Posts
- Frontend design for homepage, login/registration
- setup.php script to setup Database with tables
- Navbar should show Logged in status
- Fix broken isAuth middleware based routing
- Add more CRUD fields for User model
- Frontend design for User profiles
- UI Fixes
- Add front-end edit profile features
- Fixes to protected routes
- Add backend edit profile features
- Profile page PHP/HTML refactored
- SQL Join in Query Builder
- Get user data from session changed to SQL Join
- List of all posts by logged in user with links to edit, delete and view full post
- Style Create Post page
- Get selected text from input
- Get Single Post basic CSS styling
- Posts in
/postlistlink to single post - Comment Model
- Comment Controller
- Get Single Post complete CSS styling
- Get Comments List via AJAX call
- Add Comment and reload comments list on submit
- Comment
created_atfield translated to human readable field in PHP itself, instead of using JS. - Returning data of a post with author data using SQL Join.
- Post author and submition date below title.
- Delete Posts using delete button UI
- User can edit a post only if he is the post author
- Style Error Page
- Only Authors of commments can see edit/delete buttons
- Delete comment if Author of Comment
- Edit Comment Front-end done.
- Edit comment if Author
- Comments with CRUD functions from registered users
- Publicly viewable user Profile styling.
- List of all users registered
- User List Page CSS styling
- Check for User data associated with sessionId in isAuth middleware
- getView reworked to automatically add user data from sessions into views
- List of latest posts from all users
- Refactor BaseController.php into RouteHandler.php.
- Refactor all controller classes into object based from static
- New BaseController Class for other Controller classes to inherit from.
- Refactor Sessions related code into seperate sessions folder in
core - Refactor code for Routes list into seperate routes folder in
app - Refactor all routers in RoutesController.php into
routesfolder inside 'appfolder - The
routesfolder must contain routes grouped by their function in a single file - Refactor into proper
baseurlsetup - Refactor resource routes(css,js,image) into its own controller in
core
- Delete previous session ID entries from DB Upon new session creation
- Input validation for all new features
- Rate Limiting
- Redo CSS in SASS
- Schema Builder
- Upvotes and Downvotes from users
Shawn D'silva |
|---|