PHPackages                             kematjaya/base-controller-bundle - 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. kematjaya/base-controller-bundle

ActiveLibrary[Framework](/categories/framework)

kematjaya/base-controller-bundle
================================

base component for traditional web application

9.0.4(3mo ago)32.3k1MITPHP

Since Nov 20Pushed 3mo ago1 watchersCompare

[ Source](https://github.com/kematjaya0/base-controller-bundle)[ Packagist](https://packagist.org/packages/kematjaya/base-controller-bundle)[ RSS](/packages/kematjaya-base-controller-bundle/feed)WikiDiscussions main Synced 1mo ago

READMEChangelogDependencies (18)Versions (75)Used By (1)

base-controller-bundle
======================

[](#base-controller-bundle)

Base component for symfony 5 application

1. installation

```
composer require kematjaya/base-controller-bundle

```

2. add to config/bundles.php

```
Kematjaya\BaseControllerBundle\BaseControllerBundle::class => ['all' => true]

```

3. usage 3.1. Controller

```
use App\Entity\Foo;
use App\Form\FooType;
use App\Filter\FooFilterType;
use App\Repository\FooRepository;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Kematjaya\BaseControllerBundle\Controller\BaseLexikFilterController as BaseController;
...

/**
 * @Route("/foo", name="foo_")
 */
class FooController extends BaseController
{
    /**
     * @Route("/", name="index", methods={"GET", "POST"})
     */
    public function index(Request $request, FooRepository $repo): Response
    {
        // create filter form objct
        $form = $this->createFormFilter(FooFilterType::class);
        // processing filter form
        $queryBuilder = $this->buildFilter($request, $form, $repo->createQueryBuilder('this'));

        return $this->render('foo/index.html.twig', [
            'datas' => parent::createPaginator($queryBuilder, $request),  // create pagination for data
            'filter' => $form->createView()
        ]);
    }

    /**
     * @Route("/new", name="new", methods={"GET","POST"})
     */
    public function new(Request $request): Response
    {
        $foo = new Foo();

        // processing form ajax
        $form = $this->createForm(FooType::class, $foo, [
            'attr' => ['id' => 'ajaxForm', 'action' => $this->generateUrl('foo_new')]
        ]);
        $result = parent::processFormAjax($request, $form);
        if ($result['process']) {

            return $this->json($result);
        }
        // end processing ajax
        // processing wihout ajax form
        $form = $this->createForm(FooType::class, $foo, [
            'action' => $this->generateUrl('foo_new')]
        ]);
        $result = parent::processForm($request, $form);
        if ($result['process']) {

            return $this->redirectToRoute('foo_index');
        }
        // end processing wihout ajax form

        return $this->render('foo/form.html.twig', [
            'foo' => $foo,
            'form' => $form->createView(), 'title' => 'new'
        ]);
    }

    /**
     * @Route("/{id}/show", name="show", methods={"GET"})
     */
    public function show(Foo $foo): Response
    {
        return $this->render('foo/show.html.twig', [
            'foo' => $foo,
        ]);
    }

    /**
     * @Route("/{id}/edit", name="edit", methods={"GET","POST"})
     */
    public function edit(Request $request, Foo $foo): Response
    {
        // processing form ajax
        $form = $this->createForm(FooType::class, $foo, [
            'attr' => ['id' => 'ajaxForm', 'action' => $this->generateUrl('foo_edit', ['id' => $foo->getId()])]
        ]);
        $result = parent::processFormAjax($request, $form);
        if ($result['process']) {

            return $this->json($result);
        }
        // end processing ajax
        // processing wihout ajax form
        $form = $this->createForm(FooType::class, $foo, [
            'action' => $this->generateUrl('foo_edit', ['id' => $foo->getId()])
        ]);
        $result = parent::processForm($request, $form);
        if ($result['process']) {

            return $this->redirectToRoute('foo_index');
        }
        // end processing wihout ajax form

        return $this->render('foo/form.html.twig', [
            'foo' => $foo,
            'form' => $form->createView(), 'title' => 'edit'
        ]);
    }

    /**
     * @Route("/{id}/delete", name="delete", methods={"DELETE"})
     */
    public function delete(Request $request, Foo $foo): Response
    {
        $tokenName = 'delete'.$foo->getId();
        parent::doDelete($request, $foo, $tokenName);

        return $this->redirectToRoute('foo_index');
    }
}

```

3.2. Form Type

```
// src/Form/FooType.php
...
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Kematjaya\BaseControllerBundle\Type\PhoneNumberType;
use Kematjaya\BaseControllerBundle\Type\DateRangeType;
...
class FooType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        // Phone Number Type
        $builder->add('phone', PhoneNumberType::class, [
                'label' => 'phone'
            ]);

        // Date Range Type
        $builder->add('phone', DateRangeType::class, [
                'label' => 'phone',
                'from_options' => ['widget' => 'single_text'],
                'to_options' => ['widget' => 'single_text']
            ]);
    }
}

```

- add to config/packages/twig.yaml

```
twig:
    form_themes:
        - '@BaseController/phone_number_layout.html.twig'

```

3.3 Filter

- filter form base on LexikFormFilterBundle :
- usage:

```
// src/Filter/FooFilterType.php
...
use Symfony\Component\Form\FormBuilderInterface;
use Kematjaya\BaseControllerBundle\Filter\AbstractFilterType;
...

class FooFilterType extends AbstractFilterType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('roles', Filters\ChoiceFilterType::class, [
                'choices' => [],
                // query json use JSONQuery(),
                // date range filter use dateRangeQuery(),
                // float / integer range use floatRangeQuery()
                'apply_filter' => $this->JSONQuery(),
                //
            ]);
    }
}

```

###  Health Score

49

—

FairBetter than 95% of packages

Maintenance80

Actively maintained with recent releases

Popularity22

Limited adoption so far

Community9

Small or concentrated contributor base

Maturity69

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 ~26 days

Recently: every ~4 days

Total

73

Last Release

103d ago

Major Versions

1.11.0 → 2.02021-07-26

2.4.2 → 7.02024-10-22

2.4.3 → 7.0.62024-12-04

7.0.7 → 8.0-BETA2026-01-18

8.0.3 → 9.0.42026-02-04

### Community

Maintainers

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

---

Top Contributors

[![kematjaya0](https://avatars.githubusercontent.com/u/36223951?v=4)](https://github.com/kematjaya0 "kematjaya0 (48 commits)")

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/kematjaya-base-controller-bundle/health.svg)

```
[![Health](https://phpackages.com/badges/kematjaya-base-controller-bundle/health.svg)](https://phpackages.com/packages/kematjaya-base-controller-bundle)
```

###  Alternatives

[sylius/sylius

E-Commerce platform for PHP, based on Symfony framework.

8.4k5.6M651](/packages/sylius-sylius)[sulu/sulu

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

1.3k1.3M152](/packages/sulu-sulu)[contao/core-bundle

Contao Open Source CMS

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

EC-CUBE EC open platform.

78527.0k1](/packages/ec-cube-ec-cube)[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)[easycorp/easyadmin-bundle

Admin generator for Symfony applications

4.3k16.7M310](/packages/easycorp-easyadmin-bundle)

PHPackages © 2026

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