PHPackages                             gelembjuk/webapp - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Framework](/categories/framework)
4. /
5. gelembjuk/webapp

ActiveLibrary[Framework](/categories/framework)

gelembjuk/webapp
================

PHP MVC Package for rapid building of web sites with HTML/AJAX/RESP API functionality

1.1.9(2y ago)078MITPHP

Since Oct 8Pushed 1y ago1 watchersCompare

[ Source](https://github.com/Gelembjuk/webapp)[ Packagist](https://packagist.org/packages/gelembjuk/webapp)[ RSS](/packages/gelembjuk-webapp/feed)WikiDiscussions master Synced 3d ago

READMEChangelogDependencies (7)Versions (30)Used By (0)

WebApp
------

[](#webapp)

PHP MVC Package for rapid building of web sites with HTML/AJAX/RESP API functionality

### Installation

[](#installation)

Using composer: [gelembjuk/webapp](http://packagist.org/packages/gelembjuk/webapp) `require: {"gelembjuk/webapp": "*"}`

### Usage

[](#usage)

This is simplest "one file" example of an app usage. On practive you will have separate folders for Controllers,Views and Models

```
// ==================== CONFIGURATION ==================================
// path to your composer autoloader
require ('vendor/autoload.php');

$thisdirectory = dirname(__FILE__) . '/'; // get parent directory of this script

// application settings
class appConfig {
    public $offline = false;
    public $loggingfilter = 'all'; // log everything
}

// application options
$options = array(
    'webroot' => $thisdirectory,
    'tmproot' => $thisdirectory.'tmp/',
    'relativebaseurl' => '/example/2/', // this option is useful only if default Router is used.
    'loggerstandard' => true,
    'applicationnamespace' => '\\',
    'defaultcontrollername' => 'MyController',
    'htmltemplatespath' => $thisdirectory.'template/',
    'htmltemplatesoptions' => array('extension' => 'htm') // our templates will have HTML extension
);

// ==================== APPLICATION LOGIC ==================================
// controller class
class MyController extends \Gelembjuk\WebApp\Controller {
    // viewer name.
    protected $defviewname = 'MyViewer';

    // ========= the only action of the controler
    protected function doSendmessage() {
        // do somethign to send message
        // best is to use a model

        // if this was JSON request then we will return success status
        // if normal web request then we will redirect to home page
        return array('success',$this->makeUrl(array('message' => 'Successfully sent')));
    }

}

// view class
class MyViewer extends \Gelembjuk\WebApp\View{
    protected function view() {
        // just display default page
        $this->htmltemplate = 'default';

        $this->viewdata['welcomemessage'] = 'Hello there!';

        return true;
    }
    protected function viewForm() {
        // display form page
        $this->htmltemplate = 'form';
        return true;
    }
    protected function viewData() {
        // display form page
        $this->htmltemplate = 'data'; // template name

        // usually it can be loaded from a Model
        $this->viewdata['data'] = array(
            array('name'=>'User1','email'=>'email1@gmail.com'),
            array('name'=>'User2','email'=>'email2@gmail.com'),
            array('name'=>'User3','email'=>'email3@gmail.com'),
        );

        return true;
    }
    protected function beforeDisplay() {
        // set some extra information for any page

        if ($this->responseformat == 'html') {
            // only if this is html format to display

            $this->viewdata['applicationtitle'] = 'Demo application';

            // include more data that should be displayed on any page of a site

        }
        return true;
    }
}

$application = \Gelembjuk\WebApp\Application::getInstance();

$application->init(new appConfig(),$options);

$application->action();
```

### Author

[](#author)

Roman Gelembjuk (@gelembjuk)

###  Health Score

33

—

LowBetter than 72% of packages

Maintenance29

Infrequent updates — may be unmaintained

Popularity9

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity74

Established project with proven stability

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~118 days

Recently: every ~343 days

Total

29

Last Release

608d ago

Major Versions

1.1.9 → v2.x-dev2024-11-03

### Community

Maintainers

![](https://www.gravatar.com/avatar/af567529d048ed36455232a1f1ec9aaa9addb8eef9fb79f14acd4dbf614573a3?d=identicon)[gelembjuk](/maintainers/gelembjuk)

---

Top Contributors

[![Gelembjuk](https://avatars.githubusercontent.com/u/1552191?v=4)](https://github.com/Gelembjuk "Gelembjuk (56 commits)")

### Embed Badge

![Health badge](/badges/gelembjuk-webapp/health.svg)

```
[![Health](https://phpackages.com/badges/gelembjuk-webapp/health.svg)](https://phpackages.com/packages/gelembjuk-webapp)
```

###  Alternatives

[laravel/dusk

Laravel Dusk provides simple end-to-end testing and browser automation.

1.9k39.6M297](/packages/laravel-dusk)[nineinchnick/edatatables

Grid widget for the Yii Framework, wrapper for the DataTables jQuery plugin

173.2k](/packages/nineinchnick-edatatables)[link-cloud/fast-hyperf

LinkCloud Fast Hyperf

241.2k1](/packages/link-cloud-fast-hyperf)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
