{"id":15518419,"url":"https://github.com/c9s/universal","last_synced_at":"2025-04-23T04:14:32.030Z","repository":{"id":47048390,"uuid":"93082055","full_name":"c9s/universal","owner":"c9s","description":"The general purpose standard library for PHP.","archived":false,"fork":false,"pushed_at":"2022-08-13T21:45:06.000Z","size":258,"stargazers_count":8,"open_issues_count":1,"forks_count":2,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-17T19:17:55.594Z","etag":null,"topics":["classloader","event","session"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/c9s.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-06-01T17:22:14.000Z","updated_at":"2024-07-10T07:34:38.000Z","dependencies_parsed_at":"2022-08-30T07:30:33.623Z","dependency_job_id":null,"html_url":"https://github.com/c9s/universal","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/c9s%2Funiversal","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/c9s%2Funiversal/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/c9s%2Funiversal/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/c9s%2Funiversal/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/c9s","download_url":"https://codeload.github.com/c9s/universal/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250349979,"owners_count":21416044,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["classloader","event","session"],"created_at":"2024-10-02T10:17:09.498Z","updated_at":"2025-04-23T04:14:31.984Z","avatar_url":"https://github.com/c9s.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"Universal\n=========\n\nUniversal is a general proprose PHP library.\n\n[![Build Status](https://travis-ci.org/c9s/universal.svg?branch=master)](https://travis-ci.org/c9s/universal)\n[![Coverage Status](https://coveralls.io/repos/github/c9s/universal/badge.svg?branch=master)](https://coveralls.io/github/c9s/universal?branch=master)\n\n# Install\n\n```sh\ncomposer require universal/universal 2.0.x-dev\n```\n\n# Components\n\n- ClassLoaders\n- Container\n- HTTPRequest\n\n## Classloader\n\n### BasePathClassLoader\n\n```php\n$loader = new BasePathClassLoader( array( \n    'vendor/pear', 'external_vendor/src'\n) );\n$loader-\u003euseEnvPhpLib();\n$loader-\u003eregister();\n```\n\n### Include Path Manipulator\n\nInclude Path manipulator\n \n ```php\n$includer = new PathIncluder(array( 'to/path', ... ));\n$includer-\u003eadd( 'path/to/lib' );\n$includer-\u003esetup();   // write set_include_path\n```\n\n## Http\n\n### StreamResponse\n\nMXHR support\n\n```php\n$response = new Universal\\Http\\StreamResponse;\nfor( $i = 0 ; $i \u003c 30000 ; $i++ ) {\n    $response-\u003ewrite(json_encode(array('i' =\u003e $i)), array(\n        'Content-Type' =\u003e 'application/json',\n    ));\n    usleep(200000);\n}\n$response-\u003efinish();\n```\n\n### HttpRequest\n\nFor multiple files:\n\n```php\n\u003c?php\n\n$req = new HttpRequest;\nforeach( $req-\u003efiles as $f ) {\n    $extname = $f-\u003egetExtension();\n    $filename = $f-\u003egetPathname();\n}\n\n$req-\u003eparam( 'username' );   // get $_REQUEST['username'];\n\n$req-\u003eget-\u003eusername;    // get $_GET['username'];\n\n$req-\u003epost-\u003eusername;   // get $_POST['username'];\n\n$req-\u003eserver-\u003epath_info;  // get $_SERVER['path_info'];\n```\n\nTo get FILE:\n\n    $req = new HttpRequest;\n\nGet $_FILES['uploaded'] hash:\n\n    $req-\u003efiles-\u003euploaded;\n\nGet file size:\n\n    $req-\u003efiles-\u003euploaded-\u003esize;\n\nGet file mime type:\n\n    $req-\u003efiles-\u003euploaded-\u003etype; // plain/text\n\nGet upload error:\n\n    $req-\u003efiles-\u003euploaded-\u003eerror;\n\nForeach file:\n\n    foreach( $req-\u003efiles-\u003euploaded as $f ) {\n        $f-\u003esize;\n    }\n\n\n## ObjectContainer\n\nConstruct a $container object or inherit from it:\n\n    $container = new Universal\\Container\\ObjectContainer;\n\nRegister a object builder for lazy building.\n\n    $container-\u003emailer = function() {\n        return new YourMailer;\n    };\n\nTo get singleton object via `__get` magic method:\n\n    $mailer = $container-\u003emailer;\n\nOr get singleton object from `instance` method:\n\n    $mailer = $container-\u003einstance('mailer');\n\nTo build a new object:\n\n    $mailer = $container-\u003ebuild('mailer');\n\nTo build a new object with arguments:\n\n    $mailer = $container-\u003ebuild('mailer', array( ... ));\n\n## Session\n\nSupported Session Storage backend:\n\n- Memcache\n- Redis\n- Native\n\nuse ObjectContainer to pass options:\n\n    $container = new Universal\\Container\\ObjectContainer;\n    $container-\u003estate = function() {\n        return new Universal\\Session\\State\\NativeState;\n    };\n    $container-\u003estorage = function() {\n        return new Universal\\Session\\Storage\\NativeStorage;\n    };\n\nNative Session:\n\n    $session = new Universal\\Session\\Session(array(  \n        'state'   =\u003e new Universal\\Session\\State\\NativeState,\n        'storage' =\u003e new Universal\\Session\\Storage\\NativeStorage,\n    ));\n    $counter = $session-\u003eget( 'counter' );\n    $session-\u003eset( 'counter' , ++$counter );\n    echo $session-\u003eget( 'counter' );\n\nSession with memcache backend:\n\n    $session = new Universal\\Session\\Session(array(  \n        'state'   =\u003e new Universal\\Session\\State\\CookieState,\n        'storage' =\u003e new Universal\\Session\\Storage\\MemcacheStorage,\n    ));\n    $counter = $session-\u003eget( 'counter' );\n    $session-\u003eset( 'counter' , ++$counter );\n    echo $session-\u003eget( 'counter' );\n\n## Event\n\n    use Universal\\Event\\EventDispatcher;\n\n    $e = Event::getInstance();\n\n    // register your handler\n    $e-\u003eregister('test', function($a, $b, $c) {\n        // do what you want\n    });\n\n    // trigger event handlers\n    $e-\u003etrigger('test', 1,2,3);\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fc9s%2Funiversal","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fc9s%2Funiversal","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fc9s%2Funiversal/lists"}