All Projects → daveh → Php Mvc

daveh / Php Mvc

Licence: mit
A simple PHP model-view-controller framework, built step-by-step as part of the "Write PHP like a pro: build an MVC framework from scratch" course on Udemy.

Projects that are alternatives of or similar to Php Mvc

aquiver
🚀 The aquifer is a java web framework based on Java8 and netty
Stars: ✭ 38 (-92.65%)
Mutual labels:  mvc-framework
Bingo-Framework
MVC framework for PHP
Stars: ✭ 15 (-97.1%)
Mutual labels:  mvc-framework
micro-MVC
An agile, small, productive and robust MVC framework for PHP with high-quality JS extensions and integrated AJAX support.
Stars: ✭ 33 (-93.62%)
Mutual labels:  mvc-framework
shivneri
Component based MVC web framework based on fort architecture targeting good code structures, modularity & performance.
Stars: ✭ 21 (-95.94%)
Mutual labels:  mvc-framework
leafMVC
MVC "Framework" created from Leaf PHP Framework
Stars: ✭ 25 (-95.16%)
Mutual labels:  mvc-framework
laminas-mvc
Laminas's event-driven MVC layer, including MVC Applications, Controllers, and Plugins
Stars: ✭ 90 (-82.59%)
Mutual labels:  mvc-framework
puremvc-swift-multicore-framework
PureMVC MultiCore Framework for Swift
Stars: ✭ 17 (-96.71%)
Mutual labels:  mvc-framework
Koseven
Koseven a Kohana fork compatible with PHP7
Stars: ✭ 332 (-35.78%)
Mutual labels:  mvc-framework
back
Back.js : MVC Framework for Node.js written in Typescript and built on top of Express.js
Stars: ✭ 51 (-90.14%)
Mutual labels:  mvc-framework
panda
🐼 Panda is an mvc web application framework built with Ruby.
Stars: ✭ 12 (-97.68%)
Mutual labels:  mvc-framework
Geisha
Tiny Java Web Framework.
Stars: ✭ 120 (-76.79%)
Mutual labels:  mvc-framework
W
Framework pédagogique de la WebForce3
Stars: ✭ 10 (-98.07%)
Mutual labels:  mvc-framework
YurunPHP
YurunPHP是宇润软件专为懒人开发者设计的一款开源PHP框架,基于MVC动态分层架构,开发者可以根据需要自行扩充分层。宇润PHP交流群:17916227
Stars: ✭ 30 (-94.2%)
Mutual labels:  mvc-framework
flask-mvc
Flask Simple Model-View-Controller(MVC)
Stars: ✭ 21 (-95.94%)
Mutual labels:  mvc-framework
miniPHP
A small, simple PHP MVC framework skeleton that encapsulates a lot of features surrounded with powerful security layers.
Stars: ✭ 147 (-71.57%)
Mutual labels:  mvc-framework
databind-js
A powerful and flexible MVC data binding library
Stars: ✭ 16 (-96.91%)
Mutual labels:  mvc-framework
booking
PHP Room meeting script โปรแกรมจองห้องประชุม PHP
Stars: ✭ 18 (-96.52%)
Mutual labels:  mvc-framework
Adonis App
Application structure for new adonis app, think of it as scaffolding a new project
Stars: ✭ 368 (-28.82%)
Mutual labels:  mvc-framework
Generator Webappstarter
Quick start a web app for mobile.Automatically adjusts according to a device’s screen size without any extra work.
Stars: ✭ 298 (-42.36%)
Mutual labels:  mvc-framework
blockbase
Lightweight MVC Framework for Node.js
Stars: ✭ 32 (-93.81%)
Mutual labels:  mvc-framework

Welcome to the PHP MVC framework

This is a simple MVC framework for building web applications in PHP. It's free and open-source.

It was created for the Write PHP like a pro: build an MVC framework from scratch course. The course explains how the framework is put together, building it step-by-step, from scratch. If you've taken the course, then you'll already know how to use it. If not, please follow the instructions below.

Starting an application using this framework

  1. First, download the framework, either directly or by cloning the repo.
  2. Run composer update to install the project dependencies.
  3. Configure your web server to have the public folder as the web root.
  4. Open App/Config.php and enter your database configuration data.
  5. Create routes, add controllers, views and models.

See below for more details.

Configuration

Configuration settings are stored in the App/Config.php class. Default settings include database connection data and a setting to show or hide error detail. You can access the settings in your code like this: Config::DB_HOST. You can add your own configuration settings in here.

Routing

The Router translates URLs into controllers and actions. Routes are added in the front controller. A sample home route is included that routes to the index action in the Home controller.

Routes are added with the add method. You can add fixed URL routes, and specify the controller and action, like this:

$router->add('', ['controller' => 'Home', 'action' => 'index']);
$router->add('posts/index', ['controller' => 'Posts', 'action' => 'index']);

Or you can add route variables, like this:

$router->add('{controller}/{action}');

In addition to the controller and action, you can specify any parameter you like within curly braces, and also specify a custom regular expression for that parameter:

$router->add('{controller}/{id:\d+}/{action}');

You can also specify a namespace for the controller:

$router->add('admin/{controller}/{action}', ['namespace' => 'Admin']);

Controllers

Controllers respond to user actions (clicking on a link, submitting a form etc.). Controllers are classes that extend the Core\Controller class.

Controllers are stored in the App/Controllers folder. A sample Home controller included. Controller classes need to be in the App/Controllers namespace. You can add subdirectories to organise your controllers, so when adding a route for these controllers you need to specify the namespace (see the routing section above).

Controller classes contain methods that are the actions. To create an action, add the Action suffix to the method name. The sample controller in App/Controllers/Home.php has a sample index action.

You can access route parameters (for example the id parameter shown in the route examples above) in actions via the $this->route_params property.

Action filters

Controllers can have before and after filter methods. These are methods that are called before and after every action method call in a controller. Useful for authentication for example, making sure that a user is logged in before letting them execute an action. Optionally add a before filter to a controller like this:

/**
 * Before filter. Return false to stop the action from executing.
 *
 * @return void
 */
protected function before()
{
}

To stop the originally called action from executing, return false from the before filter method. An after filter is added like this:

/**
 * After filter.
 *
 * @return void
 */
protected function after()
{
}

Views

Views are used to display information (normally HTML). View files go in the App/Views folder. Views can be in one of two formats: standard PHP, but with just enough PHP to show the data. No database access or anything like that should occur in a view file. You can render a standard PHP view in a controller, optionally passing in variables, like this:

View::render('Home/index.php', [
    'name'    => 'Dave',
    'colours' => ['red', 'green', 'blue']
]);

The second format uses the Twig templating engine. Using Twig allows you to have simpler, safer templates that can take advantage of things like template inheritance. You can render a Twig template like this:

View::renderTemplate('Home/index.html', [
    'name'    => 'Dave',
    'colours' => ['red', 'green', 'blue']
]);

A sample Twig template is included in App/Views/Home/index.html that inherits from the base template in App/Views/base.html.

Models

Models are used to get and store data in your application. They know nothing about how this data is to be presented in the views. Models extend the Core\Model class and use PDO to access the database. They're stored in the App/Models folder. A sample user model class is included in App/Models/User.php. You can get the PDO database connection instance like this:

$db = static::getDB();

Errors

If the SHOW_ERRORS configuration setting is set to true, full error detail will be shown in the browser if an error or exception occurs. If it's set to false, a generic message will be shown using the App/Views/404.html or App/Views/500.html views, depending on the error.

Web server configuration

Pretty URLs are enabled using web server rewrite rules. An .htaccess file is included in the public folder. Equivalent nginx configuration is in the nginx-configuration.txt file.


Signup for the course here and understand how this framework is built from scratch, putting it all together step by step.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].