A resource-oriented application framework

Overview

Logo

BEAR.Sunday

A resource-oriented application framework

Scrutinizer Code Quality codecov Type Coverage Continuous Integration

What's BEAR.Sunday

This resource orientated framework has both externally and internally a REST centric architecture, implementing Dependency Injection and Aspect Orientated Programming heavily to offer you surprising simplicity, order and flexibility in your application. With very few components of its own, it is a fantastic example of how a framework can be built using existing components and libraries from other frameworks, yet offer even further benefit and beauty.

Because everything is a resource

In BEAR.Sunday everything is a REST resource which leads to far simpler design and extensibility. Interactions with your database, services and even pages and sections of your app all sit comfortably in a resource which can be consumed or rendered at will.

Documentation

Related project

Comments
  • rfc: README

    rfc: README

    READMEをfeature/readmeブランチで準備してます。 https://github.com/koriym/BEAR.Sunday/tree/feature/readme

    数分でさらっとみて、楽しそうだったり、良さそうに思えたり、興味が出て印象を残せるようなREADMEが目標です。詳しい使い方が分かる必要はありませんが、初見で何だか分からないものだけのものが並んでいたら問題です。

    現在のものでどのような印象を受けられるでしょうか? あるいは、良いREADMEを持つ他のフレームワークはどれでしょうか?

    RFC 
    opened by koriym 21
  • Introduce content negotiation feature

    Introduce content negotiation feature

    Motivation

    Content negotiation is important feature of HTTP 1.1 and also valuable for REST.

    Purpose

    Allow to set up content negotiation setting via method/class annotation.

    Suggestion

    To achieve the purpose, I suggest following implements:

    • [ ] Add ContentType annotation, which marks a resource or a REST verb method will be render as a representation.
    • [ ] Add SimpleRendererInjector as a interceptor like DbInjector. (Package)
    • [ ] Add ContentNegotiatingRendererInjector like DbInjector. (Package)

    Note: SimpleRendererInjector doesn't conetent negotiate. I'll refer the detail follow.

    SimpleRendererjector

    Example:

    /**
     * @ContentType("text/html")
     */
    class Something extends Page
    {
        /**
         * @ContentType("application/hal+json")
         */
         public function onPost()
         {
             // do something...
             return $this;
         }
    
        /**
         * no annotation here
         */
        public function onGet()
        {
             // do something...
             return $this;
        }
    }
    

    この場合、GET,POSTリクエストごとにより異なるレンダラーがInjectされます。 GETであればhtmlをレンダリングするためのレンダラー、POSTであればHALをレンダリングするためのレンダラーです。 content-typeとレンダラーは何らかの形でマッピングして管理することを想定しています。 また、このInjectorはHTTP Acceptヘッダも確認し、指定されているcontent-typeがリストに含まれない場合、code 406 Not Acceptableを設定したリソースオブジェクトを返します。

    ContentNegotiatingRendererInjector

    Example:

    /**
     * @ContentType("text/html, text/plain, application/json;q=0.8")
     */
    class Something extends Page
    {
        public function onGet()
        {
             // do something...
             return $this;
        }
    }
    

    この例に対しContentNegotiationgRendererInjectorはリクエストのAcceptヘッダに基づき、サーバー駆動コンテントネゴシエーションを行い適切なrendererをインジェクトするか、 要求を満たせない場合にはcode 406 Not Acceptableを設定したリソースオブジェクトを返します。

    懸念事項

    • content-typeとレンダラーのマッピングをリソースごとに切り替えたい場合の指定方法とその実装
    opened by MugeSo 20
  • Get parameter not retrieved

    Get parameter not retrieved

    For some instance, get parameter was not able to retrieved in process. Context "prod-api-app" is set.

    Illustration 1: Source Code 2016-08-01_1704

    Illustration 2: In this case, we set a get parameter "offset" in the URL but it wasn't able to retrieve the data (NULL) in Illustration 1 above. We also updated to different parameter name but the output is still the same. 2016-08-01_1653

    opened by john-richard 19
  • Notice: Illegal member variable name in /path/to//Ray/Di/Injector.php on line 675

    Notice: Illegal member variable name in /path/to//Ray/Di/Injector.php on line 675

    $ composer create-project --dev bear/package ./bear
    Installing bear/package (0.6.6)
      - Installing bear/package (0.6.6)
    

    snip

    Generating autoload files
    php /var/www/vhosts/local.example.com/bear/vendor/classpreloader/classpreloader/classpreloader.php compile --config=/var/www/vhosts/local.example.com/bear/bin/data/loader/config.php --output=/var/www/vhosts/local.example.com/bear/scripts/preloader.php
    > Loading configuration file
    
    Notice: Illegal member variable name in /var/www/vhosts/local.example.com/bear/vendor/ray/di/src/Ray/Di/Injector.php on line 675
    

    Instead of notice occurs only during installation, which has also been observed at the time that the application is executed.

    $ php api.php get "app://self/first/greeting?name=gusagi"
    
    Notice: Illegal member variable name in /var/www/vhosts/local.example.com/bear/vendor/ray/di/src/Ray/Di/Injector.php on line 675
    

    snip

    200 OK
    date: ["Mon, 29 Apr 2013 02:45:47 GMT"]
    [BODY]
    Hello, gusagi
    
    opened by gusagi 19
  • rfc: new feature

    rfc: new feature "Signal Parameter"

    Overview

    通常、メソッドの引き数は呼び出す側が指定するか、メソッドシグネチャーでデフォルト値を指定します。どちらの指定も無いときは通常エラーになりますが、このような場合に引き数を用意するる機構が"Signal Parameter"です。

    Normally, an argument is provided by caller or method signature's default value. None of argument provided cause 'Warning: Missing argument' error. "Signal Parameter" function provides argument in this case.

    引き数の用意の責任を、メソッド自身、メソッドの利用者から分離してボイラプレートコードの削減やテスタビリティの向上に役立てます。

    We expected to reduce boiler plate code and increase testability by removing the responsibility for argument provide from the caller or the method itself.

    Example

    例)$now引き数を必要とするページリソース

    class Param extends Page
    {
        public function onGet($now)
        {
            $this->body['now'] = $now;
            return $this;
        }
    }
    

    引き数を用意するパラメータープロバイダーを定義します。

    Parameter Provider

    現在時刻を用意するパラメータープロバイダー

    namespace Sandbox\Params;
    
    use BEAR\Resource\ParamProviderInterface;
    use BEAR\Resource\Param;
    
    class CurrentTime implements ParamProviderInterface
    {
        public function __invoke(Param $param)
        {
            $time = date("Y-m-d H:i:s", time());
            return $param->inject($time);
        }
    }
    

    ParamProviderInterfaceを実装したメソッドでは引き数に様々なアクセスができるParam型変数を受け取ります。プロバイダーからはメソッドや対象オブジェクトにアクセスできるので、他の引き数やメソッドにつけられたアノテーションによって引き数の準備を変える事ができます。ex) $endOfDayは他の引き数$monthを見て28/30/31を選択して注入

    $args = $param->getArg(); // メソッドの引き数を全てを取得します
    $paramReflection = $param->getParameter(); // パラメーターのリフレクションを取得します
    $param->getMethodInvocation()->getMethod() // メソッドのリフレクションを取得します
    $param->getMethodInvocation()->getThis(); // メソッドのオブジェクトを取得します。
    

    引き数が 用意できるとき$param->inject()で注入します。出来ない時はそのままreturnします。

    Binding

    引き数名と引き数プロバイダーを登録することで利用可能になります。1つの変数に対して登録が複数できます。引き数プロバイダーは変数が用意されるまで順番にコールされます。

    We need to bind 'variable name' and 'variable provider' to use this 'Signal Parameter' functionality. Parameter provider will be called till argument is provided.

     $signalParam->attachParamProvider('now', new CurrentTime);
    

    Idea

    Pull Architecture

    For example, "Calendar" helper in view template needs $year and $month to render calendar. 'Signal Parameter' enables every controller does no need to assign $year and $month in every controller which has calendar view.

    loginId

    Login ID is provider by "SessionLoginIdProvider" or "CookieIdProvider", but "TestLoginIdProvider" will provide in "test" mode. Caller and method changed nothing.

    Overide

    (not implemented yet) Regardless how do you call, Specified arguments by name or caller are overridden. Main use is for the test.

    Actual code

     $this->install(new SignalParamModule($this, $this->params));
    

    in https://github.com/koriym/BEAR.Package/blob/e08cf8ebf39f539b605daab03315d4222f57b810/apps/Sandbox/Module/App/AppModule.php

    RFC 
    opened by koriym 15
  • 500 Internal Server Error on bear.sunday skeleton 1.0.4

    500 Internal Server Error on bear.sunday skeleton 1.0.4

    I have checked out a new bear.sunday skeleton on local. Based on the documention, I accessed it in a console but I encountered an issue during the testing https://bearsunday.github.io/manuals/1.0/en/tutorial.html

    $ php boostrap/api.php get '/weekday?year=2016&month=8$day=24'
    500 Internal Server Error
    content-type: application/vnd.error+json
    
    {"message":"500 Server Error","logref":"2734605443"}
    
    [Ray\Compiler\Exception\NotCompiled]
    MyVendor\Weekdaytwo\Resource\App
     /home/johnrichard/bear.sunday/excite/MyVendor.Weekdaytwo/var/log/last_error.log
    

    I also have noticed a warning in app.cli-hal-api-app.log

    [24-Aug-2016 12:09:51 Asia/Manila] PHP Warning:  ucwords() expects
    exactly 1 parameter, 2 given in
    /home/johnrichard/bear.sunday/excite/MyVendor.Weekdaytwo/vendor/bear/resource/src/AppAdapter.php on line 53
    

    Did I missed something with my testing? Or is there something wrong with my setting?

    Thank you in advance.

    opened by john-richard 8
  • Respect response's status code

    Respect response's status code

    Passing WWW-Authenticate to header() overwrites the status code to 401.

    https://github.com/php/php-src/blob/a51cb393b1accc29200e8f57ef867a6a47b2564f/main/SAPI.c#L829

    According to RFC it is said that it is also possible to include WWW-Authenticate in status codes other than 401.

    https://tools.ietf.org/html/rfc7235#page-7

    A server MAY generate a WWW-Authenticate header field in other response.

    Since OAuth 2.0 Bearer writes its contents in WWW-Authenticate header even for errors other than 401, the original status code is applied after the status code reaches 401 by inserting the WWW-Authenticate header field is necessary.

    https://tools.ietf.org/html/rfc6750#page-9


    401 以外のステータスコードでも WWW-Authenticate ヘッダを挿入できるように。

    header()WWW-Authenticate を渡すとステータスコードが 401 に上書きされます。

    https://github.com/php/php-src/blob/a51cb393b1accc29200e8f57ef867a6a47b2564f/main/SAPI.c#L829

    RFC によれば 401 以外のステータスコードでも WWW-Authenticate を含めてもよいとされています。

    https://tools.ietf.org/html/rfc7235#page-7

    A server MAY generate a WWW-Authenticate header field in other response.

    OAuth 2.0 Bearer では 401 以外のエラーでもその内容を WWW-Authenticate ヘッダ記述するため、WWW-Authenticate ヘッダを挿入したことによってステータスコードが 401 になった後、本来のステータスコードが適用される必要があります。

    https://tools.ietf.org/html/rfc6750#page-9

    opened by ryo88c 7
  • The script tried to execute a method or access a property of an incomplete object error.

    The script tried to execute a method or access a property of an incomplete object error.

    I am getting this error when making requests in succession via the API in a JS application.

    The request is fine when made in isolation. Could this be a timing issue where the file system is taking to long to finish saving files before the next request is made? If so it is likely this could cause problems in production?

    Stack trace is below.

    Notice: BEAR\Resource\Request::toUri(): The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition "Mackstar_Spout_Admin_Resource_App_Resources_Types_787123e35aeafccd2233450591d33004RayAop" of the object you are trying to operate on was loaded _before_ unserialize() gets called or provide a __autoload() function to load the class definition in /Users/MackstarMBA/Sites/Mackstar.Spout/vendor/bear/resource/src/BEAR/Resource/Request.php on line 148 Call Stack Time Memory Function Location 1 0.0003 257808 {main}( ) ../api.php:0 2 1.0267 8033752 BEAR\Resource\Resource->request( ) ../api.php:81 3 1.0268 8034216 BEAR\Resource\Resource->invoke( ) ../Resource.php:259 4 1.0268 8034408 BEAR\Resource\Invoker->invoke( ) ../Resource.php:276 5 1.0269 8035976 call_user_func_array( ) ../Invoker.php:122 6 1.0269 8036312 Mackstar_Spout_Admin_Resource_App_Resources_Detail_b04ca60ab9ad9da2281fd626e6d78c28RayAop->onGet( ) ../Invoker.php:122 7 1.0272 8052000 Ray\Aop\ReflectiveMethodInvocation->proceed( ) ../Mackstar_Spout_Admin_Resource_App_Resources_Detail_b04ca60ab9ad9da2281fd626e6d78c28RayAop.php:21 8 1.0272 8052592 Mackstar\Spout\Admin\Interceptor\Tools\PagerAppender->invoke( ) ../ReflectiveMethodInvocation.php:102 9 1.0272 8052704 Ray\Aop\ReflectiveMethodInvocation->proceed( ) ../PagerAppender.php:16 10 1.0272 8052664 BEAR\Package\Module\Database\Dbal\Interceptor\DbInjector->invoke( ) ../ReflectiveMethodInvocation.php:102 11 1.0287 8318584 Ray\Aop\ReflectiveMethodInvocation->proceed( ) ../DbInjector.php:117 12 1.0287 8318544 Mackstar\Spout\Admin\Interceptor\Tools\ModelHeaderAppender->invoke( ) ../ReflectiveMethodInvocation.php:102 13 1.0287 8318696 Ray\Aop\ReflectiveMethodInvocation->proceed( ) ../ModelHeaderAppender.php:26 14 1.0287 8319048 invokeArgs( ) ../ReflectiveMethodInvocation.php:98 15 1.0287 8319080 Mackstar_Spout_Admin_Resource_App_Resources_Detail_b04ca60ab9ad9da2281fd626e6d78c28RayAop->onGet( ) ../ReflectiveMethodInvocation.php:98 16 1.0287 8319560 call_user_func_array( ) ../Mackstar_Spout_Admin_Resource_App_Resources_Detail_b04ca60ab9ad9da2281fd626e6d78c28RayAop.php:18 17 1.0287 8319592 Mackstar\Spout\Admin\Resource\App\Resources\Detail->onGet( ) ../Mackstar_Spout_Admin_Resource_App_Resources_Detail_b04ca60ab9ad9da2281fd626e6d78c28RayAop.php:18 18 1.0303 8447576 BEAR\Resource\Resource->request( ) ../Detail.php:34 19 1.0303 8447576 BEAR\Resource\Request->toUri( ) ../Resource.php:248

    opened by mackstar 7
  • `composer dump-autoload --optimize` failed

    `composer dump-autoload --optimize` failed

    On BEAR.Sunday project, composer dump-autoload --optimize command failure.

    $ composer dumpautoload -o
    Generating optimized autoload files
    
      [RuntimeException]
      File at "/path/to/bear-sunday-project-dir/vendor/bear/sunday/src/Extension/Re
      presentation/RenderInterface.php" does not exist, check your classmap definitions
    
    $ ls -l /path/to/bear-sunday-project-dir/vendor/bear/sunday/src/Extension/Representation/RenderInterface.php
    lrwxr-xr-x  1 staff  staff  53  4 22 19:12 /path/to/bear-sunday-project-dir/vendor/bear/sunday/src/Extension/Representation/RenderInterface.php -> ../../../vendor/bear/resource/src/RenderInterface.php
    

    But the following file not exists in the BEAR.Sunday project dir.

    /path/to/bear-sunday-project-dir/vendor/bear/sunday/vendor/bear/resource/src/RenderInterface.php
    
    opened by madapaja 6
  • [RuntimeException] Failed to clone git@github.com:playmedia/Smarty.git

    [RuntimeException] Failed to clone [email protected]:playmedia/Smarty.git

    It seems playmedia/Smarty was removed.

    $ composer create-project bear/package ./bear

      [RuntimeException]                                                           
      Failed to clone [email protected]:playmedia/Smarty.git via git, https, ssh pro  
      tocols, aborting.                                                            
    
      - git://github.com/playmedia/Smarty.git                                      
        Cloning into '/Users/kenji/tmp/bear/vendor/playmedia/smarty'...            
        fatal: remote error:                                                       
          Repository not found.                                                    
    
      - https://github.com/playmedia/Smarty.git                                    
        Cloning into '/Users/kenji/tmp/bear/vendor/playmedia/smarty'...            
        remote: Invalid username or password.                                      
        fatal: Authentication failed for 'https://github.com/playmedia/Smarty.git  
      /'                                                                           
    
      - [email protected]:playmedia/Smarty.git                                        
        Cloning into '/Users/kenji/tmp/bear/vendor/playmedia/smarty'...            
        ERROR: Repository not found.                                               
        fatal: Could not read from remote repository.                              
    
        Please make sure you have the correct access rights                        
        and the repository exists.
    
    opened by kenjis 6
  • index.phpがリクエストを受ける場合の実行時間について

    index.phpがリクエストを受ける場合の実行時間について

    @koriym 掲題の件、 #30 の主旨からは外れているのでissueを分離しました。

    それは1リクエストにそれだけかかってるという事でしょうか??

    1リクエストです。 nginx + php-fpm, built-in serverの両方で確認しましたが、index.phpがリクエストを受け付ける場合にかなり負荷と時間が掛かっているようです。 built-in serverでweb.php の場合は結構あっさり返ってきましたが、index.phpの場合は前述のスペックだと100秒前後掛かりました。

    opened by gusagi 6
Releases(1.7.0)
  • 1.7.0(Nov 29, 2022)

    PHP 7.4 reached EOL yesterday (28 Nov 2022) and this package will also support PHP 8.0 and above. https://www.php.net/eol.php

    What's Changed

    • PHP 8.2 Support by @koriym in https://github.com/bearsunday/BEAR.Sunday/pull/170
    • Drop PHP 7.4 support and optimized for PHP8 by @koriym in https://github.com/bearsunday/BEAR.Sunday/pull/171

    Full Changelog: https://github.com/bearsunday/BEAR.Sunday/compare/1.6.1...1.7.0

    Source code(tar.gz)
    Source code(zip)
  • 1.6.1(Mar 27, 2022)

    What's Changed

    • Support psr/log 2 and 3 by @koriym in https://github.com/bearsunday/BEAR.Sunday/pull/167
    • Update Attribute::TARGET for DefaultSchemeHost by @koriym in https://github.com/bearsunday/BEAR.Sunday/pull/168
    • Document the public bindings provided by modules by @koriym in https://github.com/bearsunday/BEAR.Sunday/pull/169

    Full Changelog: https://github.com/bearsunday/BEAR.Sunday/compare/1.6.0...1.6.1

    Source code(tar.gz)
    Source code(zip)
  • 1.6.0(Jan 11, 2022)

    What's Changed

    • Support PHP 8.1 by @koriym in https://github.com/bearsunday/BEAR.Sunday/pull/159
    • Bump phpstan 1.0 by @koriym in https://github.com/bearsunday/BEAR.Sunday/pull/160
    • Create update-copyright-years-in-license-file.yml by @koriym in https://github.com/bearsunday/BEAR.Sunday/pull/161
    • Update license copyright year(s) by @github-actions in https://github.com/bearsunday/BEAR.Sunday/pull/162
    • Drop deprecated PHP 7.3 support by @koriym in https://github.com/bearsunday/BEAR.Sunday/pull/163
    • Deprecate AbstractApp class by @koriym in https://github.com/bearsunday/BEAR.Sunday/pull/164
    • Update code to PHP 7.4 syntax using rector by @koriym in https://github.com/bearsunday/BEAR.Sunday/pull/165

    Refactor Router

    • array-shape type parameter Sever, Globals (phpstan supports)
    • RouterMatch accepts parameters in constructor

    New Contributors

    • @github-actions made their first contribution in https://github.com/bearsunday/BEAR.Sunday/pull/162

    Full Changelog: https://github.com/bearsunday/BEAR.Sunday/compare/1.5.5...1.6.0

    Source code(tar.gz)
    Source code(zip)
  • 1.5.5(Jul 15, 2021)

    • Remove cache #157
    • Deprecate AbstractApp. User AppInterface instead. @see https://github.com/bearsunday/BEAR.Skeleton/blob/1.10.1/src/Module/App.php
    Source code(tar.gz)
    Source code(zip)
  • 1.5.4(Mar 17, 2021)

  • 1.5.3(Jan 19, 2021)

  • 1.5.2(Jan 15, 2021)

  • 1.5.1(Oct 10, 2020)

  • 1.5.0(Jul 11, 2020)

  • 1.4.3(Jun 27, 2020)

  • 1.4.2(Jun 24, 2020)

  • 1.4.1(Jun 21, 2020)

    • Refactor #136 #140
    • Generic notation in PHPDoc #137 #138 #139
    • More tests #141

    image Eclipse x Solstice 2020 https://www.yomiuri.co.jp/science/20200621-OYT1T50167/

    Source code(tar.gz)
    Source code(zip)
  • 1.4.0(Dec 4, 2019)

  • 1.3.5(Aug 8, 2019)

  • 1.3.4(Jun 22, 2019)

  • 1.3.3(Jun 22, 2019)

  • 1.3.2(Feb 5, 2019)

  • 1.3.1(Oct 23, 2018)

  • 1.3.0(Oct 15, 2018)

    • Support PHP 7.3 #117
    • Add HttpCacheInterface #116
    • Cleanup the code #118 #115

    image

    image

    Representational State Transfer (REST) 5.1.4 Cache

    In order to improve network efficiency, we add cache constraints to form the client-cache-stateless-server style of Section 3.4.4 (Figure 5-4). Cache constraints require that the data within a response to a request be implicitly or explicitly labeled as cacheable or non-cacheable. If a response is cacheable, then a client cache is given the right to reuse that response data for later, equivalent requests.

    The advantage of adding cache constraints is that they have the potential to partially or completely eliminate some interactions, improving efficiency, scalability, and user-perceived performance by reducing the average latency of a series of interactions. The trade-off, however, is that a cache can decrease reliability if stale data within the cache differs significantly from the data that would have been obtained had the request been sent directly to the server.

    Source code(tar.gz)
    Source code(zip)
  • 1.2.3(Sep 18, 2018)

  • 1.2.2(Mar 14, 2018)

    • Drop php 5.x and hhvm support #109
    • Refactor the code
    • Annotation loader registration is no more needed. Ray.Aop 2.6.0

    In memory of Stephen William Hawking (8 January 1942 – 14 March 2018) https://www.ted.com/talks/stephen_hawking_asks_big_questions_about_the_universe

    image

    Source code(tar.gz)
    Source code(zip)
  • 1.2.1(Oct 12, 2017)

  • 1.2.0(Aug 21, 2017)

  • 1.1.1(Apr 29, 2017)

  • 1.1.0(Feb 27, 2017)

  • 1.0.5(Oct 5, 2016)

    [Fix] The exception thrown in HttpResponder and return correct code. It was only logging and return empty string if lazy request (in __toString) caught exception.

    Source code(tar.gz)
    Source code(zip)
  • 1.0.4(Aug 17, 2016)

  • 1.0.3(Apr 23, 2016)

  • 1.0.2(Apr 22, 2016)

  • 1.0.1(Aug 24, 2015)

Owner
BEAR.Sunday
A resource oriented framework
BEAR.Sunday
A resource-oriented micro PHP framework

Bullet Bullet is a resource-oriented micro PHP framework built around HTTP URIs. Bullet takes a unique functional-style approach to URL routing by par

Vance Lucas 415 Dec 27, 2022
Dictionary of attack patterns and primitives for black-box application fault injection and resource discovery.

FuzzDB was created to increase the likelihood of finding application security vulnerabilities through dynamic application security testing. It's the f

FuzzDB Project 7.1k Dec 27, 2022
This package has framework agnostic Cross-Origin Resource Sharing (CORS) implementation.

Description This package has framework agnostic Cross-Origin Resource Sharing (CORS) implementation. It is complaint with PSR-7 HTTP message interface

null 60 Nov 9, 2022
:gem: Go! AOP PHP - modern aspect-oriented framework for the new level of software development

Go! Aspect-Oriented Framework for PHP Go! AOP is a modern aspect-oriented framework in plain PHP with rich features for the new level of software deve

Go! Aspect-Oriented Framework 1.6k Dec 29, 2022
The Semaphore Component manages semaphores, a mechanism to provide exclusive access to a shared resource.

Semaphore Component The Semaphore Component manages semaphores, a mechanism to provide exclusive access to a shared resource. Resources Documentation

Symfony 29 Nov 16, 2022
High-Performance Long-Living PHP Framework for modern enterprise application development

Documentation · Discord · Telegram · Twitter Spiral Framework is a High-Performance Long-Living Full-Stack framework and group of over sixty PSR-compa

Spiral Scout 1.4k Jan 1, 2023
A simple, secure, and scalable PHP application framework

Opulence Introduction Opulence is a PHP web application framework that simplifies the difficult parts of creating and maintaining a secure, scalable w

Opulence 732 Dec 30, 2022
PHPLucidFrame (a.k.a LucidFrame) is an application development framework for PHP developers

PHPLucidFrame (a.k.a LucidFrame) is an application development framework for PHP developers. It provides logical structure and several helper utilities for web application development. It uses a functional architecture to simplify complex application development. It is especially designed for PHP, MySQL and Apache. It is simple, fast, lightweight and easy to install.

PHPLucidFrame 19 Apr 25, 2022
PIP is a tiny application framework built for people who use a LAMP stack.

PIP is a tiny application framework built for people who use a LAMP stack. PIP aims to be as simple as possible to set up and use.

Ron Marasigan 244 Dec 30, 2022
Slim Framework skeleton application with MVC Schema

Slim Framework skeleton application with MVC Schema

JingwenTian 9 Apr 29, 2021
This repository contains a library of optional middleware for your Slim Framework application

Slim Framework Middleware This repository contains a library of optional middleware for your Slim Framework application. How to Install Update your co

Slim Framework 47 Nov 7, 2022
Slim Framework 3 Skeleton Application + PagSeguro Lib

Slim Framework 3 Skeleton Application + PagSeguro Lib Aplicação simples para geração do Token para pagamentos no PagSeguro (método transparente) e env

Raí Siqueira 1 Feb 26, 2018
Rori-PHP is custom non production web application framework inspired by Laravel syntax

Rori-PHP is custom non production web application framework inspired by Laravel syntax. A web framework provides a structure and starting point for your application allowing you to focus on creating something amazing.

UnknownRori 5 Jul 28, 2022
Opulence is a PHP web application framework that simplifies the difficult parts of creating and maintaining a secure, scalable website.

Opulence Introduction Opulence is a PHP web application framework that simplifies the difficult parts of creating and maintaining a secure, scalable w

Opulence 733 Sep 8, 2022
CleverStyle Framework is simple, scalable, fast and secure full-stack PHP framework

CleverStyle Framework is simple, scalable, fast and secure full-stack PHP framework. It is free, Open Source and is distributed under Free Public Lice

Nazar Mokrynskyi 150 Apr 12, 2022
I made my own simple php framework inspired from laravel framework.

Simple MVC About Since 2019, I started learning the php programming language and have worked on many projects using the php framework. Laravel is one

null 14 Aug 14, 2022
PHPR or PHP Array Framework is a framework highly dependent to an array structure.

this is new repository for php-framework Introduction PHPR or PHP Array Framework is a framework highly dependent to an array structure. PHPR Framewor

Agung Zon Blade 2 Feb 12, 2022
I made my own simple php framework inspired from laravel framework.

Simple MVC About Since 2019, I started learning the php programming language and have worked on many projects using the php framework. Laravel is one

Rizky Alamsyah 14 Aug 14, 2022