Symprowire is a PHP MVC Framework based and built on Symfony, using the ProcessWire CMS as DBAL and Service Provider.

Overview

Symprowire - PHP MVC Framework for ProcessWire 3.x

Symprowire is a PHP MVC Framework based and built on Symfony using ProcessWire 3.x as DBAL and Service-Provider.

It acts as a Drop-In Replacement Module to handle the Request/Response outside the ProcessWire Admin.

Symprowire's main Goal is to give an easy path to follow an MVC Approach during development with ProcessWire and open up the available eco-system.

To learn more about Symprowire

Requirements

  • PHP ^7.4
  • Fresh ProcessWire ^3.0.181 with a Blank Profile
  • Composer 2 (v1 should work, not recommended)
  • The usual Symfony Requirements

Features

  • Twig
  • Dependency Injection
  • Monolog for Symprowire
  • Support for .env
  • YAML Configuration
  • Symfony Console and Console Commands
  • Symfony Webprofiler
  • Full ProcessWire access inside your Controller and Services
  • Webpack Encore support

Installation

  • Create a new ProcessWire 3.0.181 Installation using the Blank Profile
  • Copy Symprowire to site/modules
  • Open up a Terminal and cd site/modules/symprowire
  • composer install
  • install the module via ProcessWire Admin

Heads up

To use Webpack Encore follow the 'Webpack Encore' section further down this Document

The Installer

Symprowire ships with a custom Installer Class to execute functions after Symprowire's Installation. The Installer is a great place to create a barbone application structure inside ProcessWire. Creating Templates, Pages, Fields etc.

You can find the Installer in site/modules/symprowire/Installer.php

Installer->run() will be executed automatically on Module Installation.

Heads up

The $installer->run() method is called by Symprowire directly after internal installation but still inside ProcessWire's Module installation process. You do not have access to Symprowire Internals at this point.

Usage

Symprowire follows Symfony best practices and ships with a HomeController to get you started. Your Business logic will live in site/modules/symprowire/src and has to follow PSR-4 Naming conventions.

To create a new Controller just extend the Symprowire/AbstractController add a new route via Annotation and create the corresponding Twig Template in site/templates/twig

The AbstractController

The AbstractController itself extends Symfony\Bundle\FrameworkBundle\Controller\AbstractController to give you Symonfy Helper functions

In addition you will get the following ProcessWire Variables inside your Controller

  • $this->page = wire('page');

  • $this->user = wire('user');

  • $this->urls = wire('urls');

  • $this->input = wire('input');

  • $this->fields = wire('fields');

  • $this->session = wire('session');

  • $this->database = wire('database');

  • $this->sanitizer = wire('sanitizer');

  • $this->templates = wire('templates');

  • $this->paths = wire('config')->paths;

  • $this->urls = wire('config')->urls;

  • $this->logger = ProcessWireLoggerService; ($log implemented as Service)

  • $this->pages = $pagesRepository; ($pages implemented as Repository)

  • $this->modules = $modulesRepository; ($modules implemented as Repository)

To gain full access to ProcessWire use $this->wire($name) inside your Controller

You should try to wrap Collections into own Repositories based on the Template you use.

You should try to wrap Modules into own Services to make them accessable for DependencyInjection and easier Testing.

Symprowire Repositories and Services implement their own Interfaces. You should follow this path as it would make testing your Application a lot easier in the long run.

Services and Autowiring

Symprowire Services will get autowired by Symfony and are thus available for DI. You can find Symprowire Interfaces and Services in site/modules/symprowire/lib.

You should not edit these files as they are the core glue between Symfony and ProcessWire.

To create your own Services site/modules/symprowire/src is the place to add them. This directory is watched by Symfony and will make your Services accessable for autowiring.

You have to use the \App Namespace for your Services and Controllers.

Webpack Encore

To bundle your Frontend you can use symfony/webpack-encore.

Requirements

  • yarn
  • npm

To activate Webpack Encore

  • cd site/modules/symprowire
  • yarn install
  • yarn build

Build files will be put into site/modules/symprowire/public/build. Encore is preconfigured to serve his encore assets trough the public dir.

All you have to do is add {{ encore_entry_link_tags('app') }} and {{ encore_entry_script_tags('app') }} to your twig template.

For a working example check out site/modules/symprowire/lib/twig

Namespaces

\Symprowire - lib Namespace used for Module/Framework Services. Do not edit

\App - Userland for your Controllers, Services, Repositories etc...

Registered Services and Repositories

  • PagesRepository

  • UserRepository

  • ModulesRepository

  • ProcessWireService // The main Service to interact with ProcessWire Data

  • ProcessWireMailerService

  • ProcessWireLoggerService

Comments
  • Bump twig/twig from 3.3.4 to 3.3.8

    Bump twig/twig from 3.3.4 to 3.3.8

    Bumps twig/twig from 3.3.4 to 3.3.8.

    Changelog

    Sourced from twig/twig's changelog.

    3.3.8 (2022-02-04)

    • Fix a security issue when in a sandbox: the sort filter must require a Closure for the arrow parameter
    • Fix deprecation notice on round
    • Fix call to deprecated convertToHtml method

    3.3.7 (2022-01-03)

    • Allow more null support when Twig expects a string (for better 8.1 support)
    • Only use Commonmark extensions if markdown enabled

    3.3.6 (2022-01-03)

    • Only use Commonmark extensions if markdown enabled

    3.3.5 (2022-01-03)

    • Allow CommonMark extensions to easily be added
    • Allow null when Twig expects a string (for better 8.1 support)
    • Make some performance optimizations
    • Allow Symfony translation contract v3+
    Commits
    • 972d860 Prepare the 3.3.8 release
    • b265233 Merge branch '2.x' into 3.x
    • fca80b5 Bump version
    • 66baa66 Prepare the 2.14.11 release
    • 9e5ca74 Merge branch '2.x' into 3.x
    • 22b9dc3 bug #3641 Disallow non closures in sort filter when the sanbox mode is enab...
    • 2eb3308 Disallow non closures in sort filter when the sanbox mode is enabled
    • 25d410b Merge branch '2.x' into 3.x
    • e056e63 bug #3638 Fix call to deprecated "convertToHtml" method (jderusse)
    • 779fdd0 Fix call to deprecated "convertToHtml" method
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies php 
    opened by dependabot[bot] 1
  • Bump symfony/security-bundle from 5.3.3 to 5.3.12

    Bump symfony/security-bundle from 5.3.3 to 5.3.12

    ⚠️ Dependabot is rebasing this PR ⚠️

    Rebasing might not happen immediately, so don't worry if this takes some time.

    Note: if you make any changes to this PR yourself, they will take precedence over the rebase.


    Bumps symfony/security-bundle from 5.3.3 to 5.3.12.

    Release notes

    Sourced from symfony/security-bundle's releases.

    v5.3.12

    Changelog (https://github.com/symfony/security-bundle/compare/v5.3.11...v5.3.12)

    • no significant changes

    v5.3.11

    Changelog (https://github.com/symfony/security-bundle/compare/v5.3.10...v5.3.11)

    • bug #43901 Default access_decision_manager.strategy option with merge (biozshock)

    v5.3.8

    Changelog (https://github.com/symfony/security-bundle/compare/v5.3.7...v5.3.8)

    • bug #43146 Fixed LogicException message of FirewallAwareTrait (fkropfhamer)

    v5.3.7

    Changelog (https://github.com/symfony/security-bundle/compare/v5.3.6...v5.3.7)

    • bug #42596 Fix wrong cache directive when using the new PUBLIC_ACCESS attribute (wouterj)

    v5.3.4

    Changelog (https://github.com/symfony/security-bundle/compare/v5.3.3...v5.3.4)

    • no significant changes
    Commits
    • be52715 security #cve-2021-41268 [SecurityBundle] Default signature_properties to the...
    • c541926 [Tests] Remove some unused fixtures
    • fa5b4ec Merge branch '4.4' into 5.3
    • 18d4a66 Default access_decision_manager.strategy option with merge.
    • 04a76b7 Fix misleading error on missing provider with authenticator manager
    • 550e5db [SecurityBundle] Default signature_properties to the previous behavior
    • b755ed5 [SecurityBundle] Fixed LogicException message of FirewallAwareTrait
    • aed98f8 [Security] Fix wrong cache directive when using the new PUBLIC_ACCESS attribute
    • 3611bfe Fix deprecation messages
    • 7db2c7d Merge branch '5.2' into 5.3
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies php 
    opened by dependabot[bot] 1
  • Bump nth-check from 2.0.0 to 2.0.1

    Bump nth-check from 2.0.0 to 2.0.1

    Bumps nth-check from 2.0.0 to 2.0.1.

    Release notes

    Sourced from nth-check's releases.

    v2.0.1

    Fixes:

    • Replace regex with hand-rolled parser for nth-expressions (#9) 9894c1d
      • Ensures parsing will always have linear time complexity.

    Internal:

    • chore(ci): Use GitHub Actions, Dependabot (#10) e02b4dd
    • Bump dependencies

    https://github.com/fb55/nth-check/compare/v2.0.0...v2.0.1

    Commits
    • 65e40b0 2.0.1
    • ff63f1d Bump eslint-config-prettier from 6.15.0 to 8.3.0 (#11)
    • ff24c93 Bump jest from 26.6.3 to 27.2.0 (#17)
    • da9d78a Bump @​typescript-eslint/parser from 4.9.0 to 4.31.1 (#18)
    • fa35caf Bump @​types/node from 14.14.10 to 16.9.1 (#16)
    • 5f39402 Bump @​typescript-eslint/eslint-plugin from 4.9.0 to 4.31.1 (#19)
    • a11c0c1 Bump prettier from 2.2.1 to 2.4.0 (#20)
    • 3ddd820 Bump @​types/jest from 26.0.15 to 27.0.1 (#13)
    • 732ab0a Bump ts-jest from 26.4.4 to 26.5.6 (#15)
    • 7efd9da Bump eslint from 7.14.0 to 7.32.0 (#14)
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Make the paths in Processwire Symfony Config configurable

    Make the paths in Processwire Symfony Config configurable

    paths in config/processwire.php are hard coded right now and depending on the Server Environment are prone to fail.

    This should either be set on Module Installation or get a better handling on runtime, due to throwing errors on composer install.

    Right now you have to figure out the right path settings if switching to your production server and encounter errors regarding site/templates/twig folder could not found.

    bug 
    opened by Luis85 0
  • Bump twig/twig from 3.3.4 to 3.4.3

    Bump twig/twig from 3.3.4 to 3.4.3

    Bumps twig/twig from 3.3.4 to 3.4.3.

    Changelog

    Sourced from twig/twig's changelog.

    3.4.3 (2022-09-28)

    • Fix a security issue on filesystem loader (possibility to load a template outside a configured directory)

    3.4.2 (2022-08-12)

    • Allow inherited magic method to still run with calling class
    • Fix CallExpression::reflectCallable() throwing TypeError
    • Fix typo in naming (currency_code)

    3.4.1 (2022-05-17)

    • Fix optimizing non-public named closures

    3.4.0 (2022-05-22)

    • Add support for named closures

    3.3.10 (2022-04-06)

    • Enable bytecode invalidation when auto_reload is enabled

    3.3.9 (2022-03-25)

    • Fix custom escapers when using multiple Twig environments
    • Add support for "constant('class', object)"
    • Do not reuse internally generated variable names during parsing

    3.3.8 (2022-02-04)

    • Fix a security issue when in a sandbox: the sort filter must require a Closure for the arrow parameter
    • Fix deprecation notice on round
    • Fix call to deprecated convertToHtml method

    3.3.7 (2022-01-03)

    • Allow more null support when Twig expects a string (for better 8.1 support)
    • Only use Commonmark extensions if markdown enabled

    3.3.6 (2022-01-03)

    • Only use Commonmark extensions if markdown enabled

    3.3.5 (2022-01-03)

    • Allow CommonMark extensions to easily be added
    • Allow null when Twig expects a string (for better 8.1 support)
    • Make some performance optimizations
    • Allow Symfony translation contract v3+
    Commits
    • c38fd6b Prepare the 3.4.3 release
    • 5a858ac Merge branch '2.x' into 3.x
    • ab40267 Prepare the 2.15.3 release
    • fc18c2e Update CHANGELOG
    • 2e8acd9 Merge branch '2.x' into 3.x
    • d6ea14a Merge branch '1.x' into 2.x
    • 35f3035 security #cve- Fix a security issue on filesystem loader (possibility to load...
    • be33323 Merge branch '2.x' into 3.x
    • 9170edf Fix doc CS
    • fab3e0f minor #3744 Adding installation instructions for Symfony (ThomasLandauer)
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies php 
    opened by dependabot[bot] 0
Releases(v0.10.0)
  • v0.10.0(Dec 31, 2021)

    Symprowire as a base Renderer for ProcessWire

    • [x] Dependecy Injection
    • [x] ProcessWire as a Service
    • [x] Twig
    • [x] Template based Controller Routing
    Source code(tar.gz)
    Source code(zip)
  • v0.10.0-beta.1(Dec 29, 2021)

    Beta 1

    Integrations

    • Dependency Injection
    • Twig
    • ProcessWire as a Service
    • Tests
    • Runtime & Kernel
    • Framework CLI

    The Setup is not yet integrated as ProcessWire Template file.

    Source code(tar.gz)
    Source code(zip)
Owner
Luis Mendez
Consultant / Product-Owner
Luis Mendez
Slim Framework flash messages service provider

Slim Framework Flash Messages This repository contains a Slim Framework Flash messages service provider. This enables you to define transient messages

Slim Framework 142 Nov 16, 2022
A Slim Framework Flash messages service provider

Slim Framework Flash Messages This repository contains a Slim Framework Flash messages service provider. This enables you to define transient messages

Slim Framework 142 Nov 16, 2022
A Slim PHP MVC framework built just for fun!

Aura Framework A Slim PHP MVC framework built just for fun! en: Note: This repository only contains the core code of the Aura framework. If you want t

Murilo Magalhães Barreto 2 Dec 16, 2021
Bootcamp project based on PHP-MVC using MySQL database.

Up-Stream This is the implementation of a full website based on PHP MVC. Using MySql database to create a website. And Bootstrap4 for front-end. Start

AmirH.Najafizadeh 4 Jul 31, 2022
A simle MVC framework implimentation using php

Vanilla-framwork A simle MVC framework implimentation using php , no additonal 3rd party are used (Vanilla Php); Email Support Configuration for email

null 3 Aug 15, 2022
a framework for WebDevelop based on the mvc structure. The name of this project for Fun because everyone can use it. Completely simple and powerful structure for all your projects

A_A (-.-) ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ |-| █▄─▄▄─█▄─██─▄█─▄▄▄▄█─▄▄▄▄█▄─█─▄█─▄▄▄─██▀▄─██─▄

MasihGhaznavi 7 Jun 29, 2022
Bugsnag notifier for the Symfony PHP framework. Monitor and report errors in your Symfony apps.

Bugsnag exception reporter for Symfony The Bugsnag Notifier for Symfony gives you instant notification of errors and exceptions in your Symfony PHP ap

Bugsnag 43 Nov 22, 2022
High performance HTTP Service Framework for PHP based on Workerman.

webman High performance HTTP Service Framework for PHP based on Workerman. Manual https://www.workerman.net/doc/webman Benchmarks https://www.techempo

walkor 1.3k Dec 1, 2022
FlyCubePHP is an MVC Web Framework developed in PHP and repeating the ideology and principles of building WEB applications, embedded in Ruby on Rails.

FlyCubePHP FlyCubePHP is an MVC Web Framework developed in PHP and repeating the ideology and principles of building WEB applications, embedded in Rub

Anton 1 Dec 21, 2021
TrailLamp is a lightweight, easy-to-use Php MVC framework that can be used to build web applications and REST APIs.

TrailLamp Introduction TrailLamp is a lightweight, easy-to-use Php MVC framework that can be used to build web applications and REST APIs. Installatio

Etorojah Okon 14 Jun 10, 2022
💡 Mudrock is a MVC PHP framework, which was inspired by the Laravel and CodeIgniter frameworks.

?? Mudrock is a MVC PHP framework, which was inspired by the Laravel and CodeIgniter frameworks

null 3 Nov 17, 2021
A simple PHP MVC framework without extra files and codes that you don't need

Welcome to (SPM) Simple PHP MVC, just what you need! This is a simple PHP MVC framework without extra files and codes that you don't need.

Van Hudson Galvoso 5 Sep 17, 2022
A super fast, customizable and lightweight PHP MVC Starter Framework to extend for your own...

PHPMVC A super fast, customizable and lightweight PHP MVC Starter Framework to extend for your own... How to Start Clone this repo - git clone https:/

Maniruzzaman Akash 8 Aug 8, 2022
a micro mvc framework for php

micro-mvc-php a micro mvc framework for php Config your Web url in .env . lifecycle All request proccess by index.php Autoload files include in bootst

Amiranbari 6 Jul 9, 2022
The Hive is a simple php mvc framework

Hive framework The Hive is a simple php mvc framework . Information Features : -MVC design -PDO connection -OOP system -Twig template -Very Fast, simp

Mohammad Maleki 2 Sep 4, 2021
This repository include my own PHP MVC Framework

PHP OWN MVC FRAMEWORK Kendimi geliştirmek ve modern PHP Framework'lerinin işleyişini kavram amacıyla inşa ettiğim profesyonele yakın PHP MVC Framework

Yılmaz Kadan 9 Nov 24, 2022
Minimal PHP MVC Framework that is eternally broken.

▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ██ ▄▄▄ █ ▄▄▀█ ▄▄██▄██ ▄▀██▄██ ▄▄▀█ ▄▄▀ ██ ███ █ ▄▄▀█▄▄▀██ ▄█ █ ██ ▄█ ▀▀ █ ██ ██ ▀▀▀ █▄▄▄▄█▄▄▄█▄▄▄█▄▄██▄▄▄█▄██▄█

Paul (hxii) Glushak 3 Dec 16, 2021
PHP MVC Framework

You can select version on branch list. cmd> composer install 0.1. Z Framework (V2.0.0) 0.2. Easiest, fastest PHP framework. (Simple) 0.3. Document 1.

Mustafa Ömer ESER 2 Nov 5, 2022