PHPackages                             radvance/radvance - 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. radvance/radvance

ActiveApplication[Framework](/categories/framework)

radvance/radvance
=================

Radvance PHP Framework

v1.67.2(5y ago)13.9k4[6 PRs](https://github.com/linkorb/radvance/pulls)MITPHP

Since Sep 29Pushed 1y ago2 watchersCompare

[ Source](https://github.com/linkorb/radvance)[ Packagist](https://packagist.org/packages/radvance/radvance)[ Docs](https://github.com/linkorb/radvance)[ RSS](/packages/radvance-radvance/feed)WikiDiscussions master Synced 1mo ago

READMEChangelog (10)Dependencies (57)Versions (167)Used By (0)

Radvance Framework
==================

[](#radvance-framework)

Warning! This framework in WIP state. Don't use it before release, please.

TODO
----

[](#todo)

- Extract `BaseConsoleApplication` from `BaseApplication`
- Extract `BaseWebApplication` from `BaseApplication`
- Release old skeleton as `1.0.0`
- Make new skeleton based on framework and tag it as `2.0.0`
- Several security providers for test-ready `parameters.yml.dist` on localhost without any real passwords
- Exceptions and errors reporting / env-based verbosity
- Error messages on constraints fails
- Publish framework as separate lib
- Extract traits from controllers and models
- Login &amp; permissions tests
- BaseApiApplication or ApplicationApiTrait

Why?
----

[](#why)

- To minimize copy-paste and monkey-coding
- To **centralized** improvements injection to all our projects
- To decrease codebse size and increase code quality
- To implement best practices on it
- To decrease cost of development

How?
----

[](#how)

### Application

[](#application)

You should extend your application from `BaseWebApplication` if you use controllers or `BaseConsoleApplication` otherwise.

```
# src/Application.php

namespace ExampleApp;

use Radvance\Framework\BaseWebApplication;
use Radvance\Framework\FrameworkApplicationInterface;

class Application extends BaseWebApplication implements FrameworkApplicationInterface
{
    // This is not needed from v1.0.0
    public function getRootPath()
    {
        return realpath(__DIR__.'/../');
    }
}
```

### Models

[](#models)

#### Name convention

[](#name-convention)

Each model need to be named with CamelCase notation. For example:

- `Thing` will be stored at `thing` database table, managed by `PdoThingRepository` and `ThingController`; templates will be stored at `templates/thing/` directory, routes should start from `thing_`: `thing_index`, `thing_view`, `thing_delete`, etc.
- `AnotherThing` will be stored at `another_thing` database table, managed by `PdoAnotherThingRepository` and `AnotherThingController`; templates will be stored at `templates/another_thing/` directory, routes should start from `another_thing_`: `another_thing_index`, `another_thing_view`, `another_thing_delete`, etc.

#### Example:

[](#example)

If you don't want to write getters/setters - you can just define class variables as `protected`.

All class variables need to be lowercase with underscores.

Good:

- `$id`
- `$another_id`
- `$another_variable`

Bad:

- `$Id`
- `$anotherId`
- `$another_Variable`

```
# src/Model/Thing.php

namespace LinkORB\Skeleton\Model;

use LinkORB\Framework\Model\ModelInterface;
use LinkORB\Framework\Model\BaseModel;

class Thing extends BaseModel implements ModelInterface
{
    protected $id;
}
```

### Repositories

[](#repositories)

You should use `BaseLegacyRepository` for fast switching to repository from old codebase or `BaseRepository` if you start new application.

#### Name convention

[](#name-convention-1)

Each repository need to be named with CamelCase notation and consists from `Pdo`, model name and `Repository`. For example:

- If we making repository for `Thing` model, right name will be `PdoThingRepository`.
- If we making repository for `AnotherThing` model, right name will be `PdoAnotherThingRepository`.

#### Example:

[](#example-1)

```
# src/Repository/PdoThingRepository.php
namespace LinkORB\Skeleton\Repository;

use Radvance\Repository\BaseRepository;
use Radvance\Repository\RepositoryInterface;
use Radvance\Model\Thing;

class PdoThingRepository extends BaseRepository implements RepositoryInterface
{
    public function createEntity()
    {
        return Thing::createNew();
    }
}
```

### Controllers

[](#controllers)

#### Name convention

[](#name-convention-2)

Each controller need to be named with CamelCase notation and consists from model name and `Controller`. For example:

- If we making controller for `Thing` model, right name will be `ThingController`.
- If we making controller for `AnotherThing` model, right name will be `AnotherThingController`.

#### Example:

[](#example-2)

```
# src/Radvance/ThingController.php

namespace ExampleApp\Controller;

use Silex\Application;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;

use Radvance\Controller\BaseController;

class ThingController extends BaseController
{
    private function getEditForm(Application $app, Request $request, $id = null)
    {
        $repo = $app->getRepository($this->getModelName());
        $entity = $repo->findOrCreate($id);
    }
}

```

### Themes

[](#themes)

Themes stored centralised right at framework. So when we change design - it applied to all our projects.

You can choose theme via `parameters.yml`:

```
# app/config/parameters.yml

theme: default

```

If `theme` parameter not listed at `parameters.yml` - `default` theme used.

Currently we have only one theme - `default`.

### Templates

[](#templates)

#### Index

[](#index)

```
{% extends "@BaseTemplates/crud/index.html.twig" %}

{% block index %}
    {% if entities|length %}

                ID
                Name
                Description
                Actions

            {% for entity in entities %}

                    {{ entity.id }}
                    {{ entity.name }}
                    {{ entity.description }}

                        {% include '@BaseTemplates/crud/index/row_buttons.html.twig' %}

            {% endfor %}

    {% else %}
        There are no proxies
    {% endif %}
{% endblock %}

{% block buttons %}

{% endblock %}
```

#### Edit

[](#edit)

```
{% extends "@BaseTemplates/crud/edit.html.twig" %}

{% block buttons %}

{% endblock %}

```

### View

[](#view)

```
{% extends "@BaseTemplates/crud/view.html.twig" %}

{% block view %}
    ID: {{ entity.getId() }}
    Name: {{ entity.getName() }}
    Description: {{ entity.getDescription() }}
{% endblock %}

{% block buttons %}

        Generate nginx config

    {#

        Generate uberproxy config

    #}
{% endblock %}

```

Logging
-------

[](#logging)

By default, logging is disabled. However, by specifying the log file location, Radvance automatically starts logging.

```
# app/config/parameters.yml
logging:
    file: app/logs/radvance.log
    # or use absolute path
    # file: /tmp/logs/radvance.log

```

Behat tests
-----------

[](#behat-tests)

### Requirements

[](#requirements)

Add next lines to your app's `composer.json` at `require-dev` section:

```
"behat/behat": "^3.0",
"behat/mink": "^1.6",
"behat/mink-extension": "^2.0",
"behat/mink-goutte-driver": "^1.1",

```

### Examples

[](#examples)

```
@crud
Feature: Server CRUD
    In order to manage server records
    As an admin
    I want to be able to perform CRUD operations with server records

    Background:
        Given there are proxy, server tables truncated
        And there are the following proxy:
            | name          | description  |
            | First         | First proxy  |
            | Second proxy  |              |
        And there are the following server:
            | proxyId  | name       | description   | ip        | port |
            | 1        | first.com  | First server  | 127.0.0.1 | 80   |
            | 1        | second.com | Second server | 127.0.0.1 | 81   |
            | 1        | third.com  |               | 127.0.0.1 | 8080 |

    Scenario: List index of all servers
        Given I am on the frontpage page
         When I follow "Server"
         Then I should be on the server index page
          And I should see 3 server in the list

    Scenario: Names are listed in the index
        Given I am on the frontpage page
         When I follow "Server"
         Then I should be on the server index page
          And I should see server with name "first.com" in the list
          And I should see server with name "second.com" in the list

    Scenario: Seeing empty index of servers
        Given there are no server
         When I am on the server index page
         Then I should see "There are no servers"

    Scenario: Accessing the server creation form
        Given I am on the frontpage page
         When I follow "Server"
          And I follow "Add"
         Then I should be on the server creation page

  # Scenario: Creating title for server

    Scenario: Creating new server
        Given I am on the server creation page
         When I select "Second proxy" from "Proxy id"
         When I fill in "Name" with "fourth.com"
         When I fill in "Ip" with "127.0.0.1"
         When I fill in "Port" with "80"
          And I press "Add"
         Then I should be on the server index page
        # And I should see "Server has been successfully created"
          And Text "fourth.com" should appear on the page
          And Text "Second proxy" should appear on the page

  # Scenario: View title for server

    Scenario: Edit title for server
        Given I am on the frontpage page
         When I follow "Server"
          And I click "Edit" near "first.com"
         Then I should see "Edit first.com server"

    Scenario: Edit existing server
        Given I am on the server "second.com" editing page
         When I fill in "Port" with "8081"
          And I press "Save"
         Then I should be on the server index page
        # And I should see "Server has been successfully updated"
          And Text "8081" should appear on the page

    Scenario: Delete server from editing page
        Given I am on the server "third.com" viewing page
         When I press "Delete"
         Then I should be redirected to server index page
        # And I should see "Server 'third.com' has been successfully deleted"
          And Text "third.com" should not appear on the page

    Scenario: Delete server from list
        Given I am on the server index page
         When I click "Delete" near "first.com"
         Then I should be redirected to server index page
        # And I should see "Server 'first.com' has been successfully deleted"
          And Text "first.com" should not appear on the page

```

Where used?
-----------

[](#where-used)

- [Proxytect](https://github.com/linkorb/proxytect)

Brought to you by the LinkORB Engineering team
----------------------------------------------

[](#brought-to-you-by-the-linkorb-engineering-team)

[![](https://camo.githubusercontent.com/62fb66b034de7ea7fca9fd9776424b5348daa76ef8622caf92c2f7622003e5ef/687474703a2f2f7777772e6c696e6b6f72622e636f6d2f642f6d6574612f74696572312f696d616765732f6c696e6b6f7262656e67696e656572696e672d6c6f676f2e706e67)](https://camo.githubusercontent.com/62fb66b034de7ea7fca9fd9776424b5348daa76ef8622caf92c2f7622003e5ef/687474703a2f2f7777772e6c696e6b6f72622e636f6d2f642f6d6574612f74696572312f696d616765732f6c696e6b6f7262656e67696e656572696e672d6c6f676f2e706e67)
Check out our other projects at [linkorb.com/engineering](http://www.linkorb.com/engineering).

Btw, we're hiring!

Any questions?
--------------

[](#any-questions)

Read the code.

###  Health Score

42

—

FairBetter than 90% of packages

Maintenance30

Infrequent updates — may be unmaintained

Popularity23

Limited adoption so far

Community17

Small or concentrated contributor base

Maturity82

Battle-tested with a long release history

 Bus Factor1

Top contributor holds 60.2% 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 ~12 days

Recently: every ~97 days

Total

161

Last Release

1888d ago

Major Versions

v0.7.0 → v1.0.02016-03-18

### Community

Maintainers

![](https://www.gravatar.com/avatar/1db66b320db18b8036ea68211b7d8a39e7c6da97e6fd29f59a50380ebb69d0bb?d=identicon)[joostfaassen](/maintainers/joostfaassen)

---

Top Contributors

[![joostfaassen](https://avatars.githubusercontent.com/u/411113?v=4)](https://github.com/joostfaassen "joostfaassen (207 commits)")[![h-wang](https://avatars.githubusercontent.com/u/3410322?v=4)](https://github.com/h-wang "h-wang (91 commits)")[![igormukhingmailcom](https://avatars.githubusercontent.com/u/6544038?v=4)](https://github.com/igormukhingmailcom "igormukhingmailcom (23 commits)")[![boite](https://avatars.githubusercontent.com/u/989892?v=4)](https://github.com/boite "boite (10 commits)")[![bvklim](https://avatars.githubusercontent.com/u/5628078?v=4)](https://github.com/bvklim "bvklim (6 commits)")[![sashaaro](https://avatars.githubusercontent.com/u/5504250?v=4)](https://github.com/sashaaro "sashaaro (3 commits)")[![dependabot[bot]](https://avatars.githubusercontent.com/in/29110?v=4)](https://github.com/dependabot[bot] "dependabot[bot] (2 commits)")[![prajapati-kaushik](https://avatars.githubusercontent.com/u/10140681?v=4)](https://github.com/prajapati-kaushik "prajapati-kaushik (2 commits)")

---

Tags

frameworklinkorbradvance

###  Code Quality

TestsBehat

Code StylePHP CS Fixer

### Embed Badge

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

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

###  Alternatives

[shopware/platform

The Shopware e-commerce core

3.3k1.5M3](/packages/shopware-platform)[shopware/core

Shopware platform is the core for all Shopware ecommerce products.

595.2M386](/packages/shopware-core)[ec-cube/ec-cube

EC-CUBE EC open platform.

78527.0k1](/packages/ec-cube-ec-cube)[contao/core-bundle

Contao Open Source CMS

1231.6M2.4k](/packages/contao-core-bundle)[prestashop/prestashop

PrestaShop is an Open Source e-commerce platform, committed to providing the best shopping cart experience for both merchants and customers.

9.0k15.4k](/packages/prestashop-prestashop)[sulu/sulu

Core framework that implements the functionality of the Sulu content management system

1.3k1.3M152](/packages/sulu-sulu)

PHPackages © 2026

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