├── zzmisc ├── x.txt ├── create_products_table.sql ├── clip.txt ├── AJs_notes.md ├── misc.todo └── objects-in-php.php ├── README.md ├── BOOKMARK.txt ├── .DS_Store ├── .gitignore ├── app ├── .DS_Store ├── Controllers │ ├── PageController.php │ └── ProductController.php ├── Models │ └── Product.php └── Router.php ├── links.txt ├── .htaccess ├── TODO.md ├── .vscode └── settings.json ├── routes └── web.php ├── composer.json ├── public └── index.php ├── views ├── homepage.php └── product.php ├── simple_mvc_setup.sh └── composer.lock /zzmisc/x.txt: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # LAMP-MVC 2 | -------------------------------------------------------------------------------- /BOOKMARK.txt: -------------------------------------------------------------------------------- 1 | NOTE: You left off at the Controller part -------------------------------------------------------------------------------- /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakao74/LAMP-MVC/HEAD/.DS_Store -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # add the vendor directory to the path 2 | /vendor* 3 | 4 | -------------------------------------------------------------------------------- /app/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kakao74/LAMP-MVC/HEAD/app/.DS_Store -------------------------------------------------------------------------------- /links.txt: -------------------------------------------------------------------------------- 1 | 2 | Website Link: 3 | 4 | https://www.giuseppemaccario.com/how-to-build-a-simple-php-mvc-framework/ 5 | 6 | -------------------------------------------------------------------------------- /.htaccess: -------------------------------------------------------------------------------- 1 | 2 | RewriteEngine On 3 | 4 | # Stop processing if already in the /public directory 5 | RewriteRule ^public/ - [L] 6 | 7 | # Static resources if they exist 8 | RewriteCond %{DOCUMENT_ROOT}/public/$1 -f 9 | RewriteRule ^(.*)$ /public/$1 [L] 10 | 11 | # Route all other requests 12 | RewriteRule ^(.*) public/index.php [L, QSA] 13 | 14 | -------------------------------------------------------------------------------- /app/Controllers/PageController.php: -------------------------------------------------------------------------------- 1 | get('product')->getPath()); 14 | 15 | require_once APP_ROOT . '/views/home.php'; 16 | } 17 | } -------------------------------------------------------------------------------- /TODO.md: -------------------------------------------------------------------------------- 1 | # Project 2 | 3 | Project Description 4 | 5 | [TODO.md spec & Kanban Board](https://bit.ly/3fCwKfM) 6 | 7 | ### Todo 8 | 9 | - [ ] screen record 10 | - [ ] explain what's happening 11 | - [ ] make it better 12 | - [ ] copy the code 13 | - [ ] deploy 14 | - [ ] MVC Framework 15 | - [ ] shell script to create folder structure 16 | 17 | ### In Progress 18 | 19 | - [ ] Controller 20 | 21 | ### Done ✓ 22 | 23 | 24 | -------------------------------------------------------------------------------- /zzmisc/create_products_table.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE IF NOT EXISTS products ( 2 | id int(10) NOT NULL auto_increment, 3 | title varchar(255) collate utf8_unicode_ci NOT NULL, 4 | description text collate utf8_unicode_ci, 5 | price decimal(12,5) NOT NULL, 6 | sku varchar(255) collate utf8_unicode_ci NOT NULL, 7 | image varchar(255) collate utf8_unicode_ci NOT NULL, 8 | PRIMARY KEY (id) 9 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1; -------------------------------------------------------------------------------- /zzmisc/clip.txt: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: AJ Javadi 3 | * @Email: amirjavadi25@gmail.com 4 | * @Date: 2023-10-22 09:57:03 5 | * @Last Modified by: Someone 6 | * @Last Modified time: 2023-10-22 09:59:50 7 | * @Description: file:///Users/aj/sandbox/LAMP-MVC/clip.txt 8 | */ 9 | 10 | 11 | 12 | LINK: 13 | https://www.giuseppemaccario.com/how-to-build-a-simple-php-mvc-framework/ 14 | 15 | 16 | 17 | 18 | 19 | Model 20 | 21 | 22 | View 23 | 24 | 25 | Controller 26 | -------------------------------------------------------------------------------- /app/Controllers/ProductController.php: -------------------------------------------------------------------------------- 1 | read($id); 15 | 16 | require_once APP_ROOT . '/views/product.php'; 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "sqltools.connections": [ 3 | { 4 | "mysqlOptions": { 5 | "authProtocol": "default", 6 | "enableSsl": "Disabled" 7 | }, 8 | "previewLimit": 50, 9 | "server": "localhost", 10 | "port": 3306, 11 | "driver": "MySQL", 12 | "name": "test", 13 | "database": "aj_simple_mvc_db", 14 | "username": "root" 15 | } 16 | ] 17 | } -------------------------------------------------------------------------------- /routes/web.php: -------------------------------------------------------------------------------- 1 | add('product', new Route(constant('URL_SUBFOLDER') . '/product/{id}', array('controller' => 'ProductController', 'method'=>'showAction'), array('id' => '[0-9]+'))); 9 | $routes->add('homepage', new Route(constant('URL_SUBFOLDER') . '/', array('controller' => 'PageController', 'method'=>'indexAction'), array())); 10 | 11 | -------------------------------------------------------------------------------- /zzmisc/AJs_notes.md: -------------------------------------------------------------------------------- 1 | 2 | # Building a Simple Model View Controller (MVC) App in MAMP Stack 3 | 4 | 5 | --- 6 | 7 | ## Introduction 8 | 9 | 10 | ## User Stories 11 | 12 | ---- 13 | 14 | 15 | //TODO: Add user stories here 16 | //TODO: save shell script as a gist 17 | //TODO: data model for the app 18 | 19 | --- 20 | 21 | 22 | --- 23 | ## Notes: 24 | 25 | - Model 26 | - an object that represents the data in the app 27 | - database table structure 28 | - CRUD 29 | - ORM (Object Relational Mapping) 30 | 31 | 32 | - View 33 | 34 | - Controller 35 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "aj/aj-simple-mvc", 3 | "description": "Simle MVC framework: a demo for LAMP/MAMP stack", 4 | "autoload": { 5 | "psr-4": { 6 | "App\\": "app" 7 | }, 8 | "classmap": [ 9 | "app/" 10 | ] 11 | }, 12 | "version": "0.1.0", 13 | "license": "MIT", 14 | "author": { 15 | "name": "AJ Javadi", 16 | "email": "amirjavadi25@gmail.com", 17 | "url": "http://github.com/oshkoshbagoshh" 18 | }, 19 | "require": { 20 | "symfony/routing": "^6.3", 21 | "symfony/http-foundation": "^6.3" 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /public/index.php: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | Simple PHP MVC 13 | 14 | 15 | 16 | 17 | 18 |
19 |

Homepage

20 |

21 | Check the first product 22 |

23 |
24 | 25 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /zzmisc/misc.todo: -------------------------------------------------------------------------------- 1 | { 2 | "todotree": { 3 | "tree": [ 4 | { 5 | "key": 1697996441688, 6 | "children": [], 7 | "todo": { 8 | "content": "Build and Query MySQL databases", 9 | "id": 1697996441688, 10 | "level": "default", 11 | "done": false, 12 | "start": 1697996441689 13 | } 14 | }, 15 | { 16 | "key": 1697996466749, 17 | "children": [], 18 | "todo": { 19 | "content": "PHP superglobals", 20 | "id": 1697996466749, 21 | "level": "default", 22 | "done": false, 23 | "start": 1697996466749 24 | } 25 | }, 26 | { 27 | "key": 1697996486236, 28 | "children": [], 29 | "todo": { 30 | "content": "PHP Superglobals", 31 | "id": 1697996486236, 32 | "level": "default", 33 | "done": false, 34 | "start": 1697996486236 35 | } 36 | } 37 | ], 38 | "expandKeys": [], 39 | "schema": "https://github.com/Saber2pr/vsc-ext-todolist/blob/master/src/api/type.ts#L3", 40 | "add_mode": "bottom", 41 | "virtual": false, 42 | "showLine": false, 43 | "playFontSize": 24, 44 | "title": "misc", 45 | "autoSort": false, 46 | "showEndTime": false, 47 | "simpleMode": false, 48 | "lang": "en", 49 | "version": "1697996493631" 50 | } 51 | } -------------------------------------------------------------------------------- /app/Models/Product.php: -------------------------------------------------------------------------------- 1 | id; 18 | } 19 | 20 | public function getTitle() 21 | { 22 | return $this->title; 23 | } 24 | public function getDescription() 25 | { 26 | return $this->description; 27 | } 28 | public function getPrice() { 29 | return $this->price; 30 | } 31 | public function getSku() { 32 | return $this->sku; 33 | } 34 | public function getImage() { 35 | return $this->image; 36 | } 37 | 38 | // SET METHODS 39 | public function setTitle(string $title) 40 | { 41 | $this->title = $title; 42 | } 43 | public function setDescription(string $description) 44 | { 45 | $this->description = $description; 46 | } 47 | public function setPrice(float $price) 48 | { 49 | $this->price = $price; 50 | } 51 | public function setSku(string $sku) 52 | { 53 | $this->sku = $sku; 54 | } 55 | public function setImage(string $image) 56 | { 57 | $this->image = $image; 58 | } 59 | 60 | 61 | // CRUD OPERATIONS 62 | public function create(array $data){ 63 | 64 | } 65 | public function read(int $id){ 66 | 67 | } 68 | public function update(int $id, array $data){ 69 | 70 | } 71 | public function delete(int $id){ 72 | 73 | } 74 | } 75 | -------------------------------------------------------------------------------- /views/product.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | simple PHP MVC 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 |

My Product:

21 |
    22 |
  • getTitle(); ?>
  • 23 |
  • getDescription(); ?>
  • 24 |
  • getPrice(); ?>
  • 25 |
  • getSku(); ?>
  • 26 |
  • getImage(); ?>
  • 27 | 28 |
29 | Back to homepage 30 |
31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | -------------------------------------------------------------------------------- /simple_mvc_setup.sh: -------------------------------------------------------------------------------- 1 | #!/bin/zsh 2 | # @Author: AJ Javadi 3 | # @Email: amirjavadi25@gmail.com 4 | # @Date: 2023-10-21 23:39:03 5 | # @Last Modified by: undefined 6 | # @Last Modified time: 2023-10-21 23:39:03 7 | # @Description: This script will create a simple MVC framework file and folder structure 8 | # 9 | # test script 10 | # build a simple MVC framework file and folder structure 11 | # the basis of the folders are: 12 | # 1. app 13 | # 2. config 14 | # 3. public 15 | # 4. views 16 | # 5. routes 17 | echo "Creating folders..." 18 | echo "===================" 19 | # echo "creating app folder..." 20 | mkdir app 21 | # echo "creating config folder..." 22 | mkdir config 23 | mkdir public 24 | mkdir views 25 | mkdir routes 26 | echo "===================" 27 | # testing if folders were created 28 | # if the folder exists, then print out the folder name and say that the folder was created already 29 | # if the folder does not exist, then print out the folder name and say that the folder was created 30 | echo "testing if folders were created..." 31 | echo "===================" 32 | if [ -d app ]; then 33 | echo "app folder was created already" 34 | else 35 | echo "app folder was created" 36 | fi 37 | if [ -d config ]; then 38 | echo "config folder was created already" 39 | else 40 | echo "config folder was created" 41 | fi 42 | if [ -d public ]; then 43 | echo "public folder was created already" 44 | else 45 | echo "public folder was created" 46 | fi 47 | if [ -d views ]; then 48 | echo "views folder was created already" 49 | else 50 | echo "views folder was created" 51 | fi 52 | if [ -d routes ]; then 53 | echo "routes folder was created already" 54 | else 55 | echo "routes folder was created" 56 | fi 57 | echo "===================" 58 | echo "...done" 59 | 60 | -------------------------------------------------------------------------------- /app/Router.php: -------------------------------------------------------------------------------- 1 | fromRequest(Request::createFromGlobals()); 20 | 21 | // Routing can match routes with incoming requests 22 | $matcher = new UrlMatcher($routes, $context); 23 | try { 24 | $arrayUri = explode('?', $_SERVER['REQUEST_URI']); 25 | $matcher = $matcher->match($arrayUri[0]); 26 | 27 | // Cast params to int if numeric 28 | array_walk($matcher, function(&$param) 29 | { 30 | if(is_numeric($param)) 31 | { 32 | $param = (int) $param; 33 | } 34 | }); 35 | 36 | // https://github.com/gmaccario/simple-mvc-php-framework/issues/2 37 | // Issue #2: Fix Non-static method ... should not be called statically 38 | $className = '\\App\\Controllers\\' . $matcher['controller']; 39 | $classInstance = new $className(); 40 | 41 | // Add routes as paramaters to the next class 42 | $params = array_merge(array_slice($matcher, 2, -1), array('routes' => $routes)); 43 | 44 | call_user_func_array(array($classInstance, $matcher['method']), $params); 45 | 46 | } catch (MethodNotAllowedException $e) { 47 | echo 'Route method is not allowed.'; 48 | } catch (ResourceNotFoundException $e) { 49 | echo 'Route does not exists.'; 50 | } catch (NoConfigurationException $e) { 51 | echo 'Configuration does not exists.'; 52 | } 53 | } 54 | } 55 | 56 | // Invoke 57 | $router = new Router(); 58 | $router($routes); -------------------------------------------------------------------------------- /zzmisc/objects-in-php.php: -------------------------------------------------------------------------------- 1 | prop1 = $Arg1; 28 | $this->prop2 = $Arg2; 29 | 30 | // etc. 31 | } 32 | } 33 | 34 | 35 | */ 36 | 37 | // class Invoice { 38 | // public $customer_id; 39 | // public $subtotal; 40 | // public $tax_rate; 41 | // public $total; 42 | 43 | // public function __construct($Customer_id, $Subtotal, $Tax_rate) { 44 | // $this->customer_id = $Customer_id; 45 | // $this->subtotal = $Subtotal; 46 | // $this->tax_rate = $Tax_rate; 47 | // $this->total = $Subtotal * (1 + $Tax_rate); 48 | // } 49 | // } 50 | 51 | // add methods to the class 52 | 53 | 54 | 55 | class Invoice { 56 | public $customer_id; 57 | public $subtotal; 58 | public $tax_rate; 59 | public $total; 60 | 61 | public function __construct($Customer_id, $Subtotal, $Tax_rate) { 62 | $this->customer_id = $Customer_id; 63 | $this->subtotal = $Subtotal; 64 | $this->tax_rate = $Tax_rate; 65 | $this->total = $Subtotal * (1 + $Tax_rate); 66 | } 67 | 68 | // add method to the class 69 | public function calculate_total() { 70 | $total = $this->subtotal * (1 + $this->tax_rate); 71 | return round($total, 2); 72 | 73 | } 74 | 75 | 76 | } 77 | 78 | // create an instance of the class (an object) 79 | // syntax: $object = new Class_Name(value1, value2, ...); 80 | $invoice = new Invoice(1, 100, 0.1); 81 | 82 | 83 | 84 | // access the object's properties 85 | // syntax: $object->property_name; 86 | // echo $invoice->customer_id; 87 | echo $invoice->calculate_total(); 88 | 89 | // working with object methods 90 | // syntax: $object->method_name(); 91 | echo $invoice->calculate_total(); 92 | 93 | 94 | ?> -------------------------------------------------------------------------------- /composer.lock: -------------------------------------------------------------------------------- 1 | { 2 | "_readme": [ 3 | "This file locks the dependencies of your project to a known state", 4 | "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", 5 | "This file is @generated automatically" 6 | ], 7 | "content-hash": "a27615dd413ebddfbd9783aa2cbb6a5b", 8 | "packages": [ 9 | { 10 | "name": "symfony/deprecation-contracts", 11 | "version": "v3.3.0", 12 | "source": { 13 | "type": "git", 14 | "url": "https://github.com/symfony/deprecation-contracts.git", 15 | "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf" 16 | }, 17 | "dist": { 18 | "type": "zip", 19 | "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/7c3aff79d10325257a001fcf92d991f24fc967cf", 20 | "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf", 21 | "shasum": "" 22 | }, 23 | "require": { 24 | "php": ">=8.1" 25 | }, 26 | "type": "library", 27 | "extra": { 28 | "branch-alias": { 29 | "dev-main": "3.4-dev" 30 | }, 31 | "thanks": { 32 | "name": "symfony/contracts", 33 | "url": "https://github.com/symfony/contracts" 34 | } 35 | }, 36 | "autoload": { 37 | "files": [ 38 | "function.php" 39 | ] 40 | }, 41 | "notification-url": "https://packagist.org/downloads/", 42 | "license": [ 43 | "MIT" 44 | ], 45 | "authors": [ 46 | { 47 | "name": "Nicolas Grekas", 48 | "email": "p@tchwork.com" 49 | }, 50 | { 51 | "name": "Symfony Community", 52 | "homepage": "https://symfony.com/contributors" 53 | } 54 | ], 55 | "description": "A generic function and convention to trigger deprecation notices", 56 | "homepage": "https://symfony.com", 57 | "support": { 58 | "source": "https://github.com/symfony/deprecation-contracts/tree/v3.3.0" 59 | }, 60 | "funding": [ 61 | { 62 | "url": "https://symfony.com/sponsor", 63 | "type": "custom" 64 | }, 65 | { 66 | "url": "https://github.com/fabpot", 67 | "type": "github" 68 | }, 69 | { 70 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 71 | "type": "tidelift" 72 | } 73 | ], 74 | "time": "2023-05-23T14:45:45+00:00" 75 | }, 76 | { 77 | "name": "symfony/http-foundation", 78 | "version": "v6.3.6", 79 | "source": { 80 | "type": "git", 81 | "url": "https://github.com/symfony/http-foundation.git", 82 | "reference": "c186627f52febe09c6d5270b04f8462687a250a6" 83 | }, 84 | "dist": { 85 | "type": "zip", 86 | "url": "https://api.github.com/repos/symfony/http-foundation/zipball/c186627f52febe09c6d5270b04f8462687a250a6", 87 | "reference": "c186627f52febe09c6d5270b04f8462687a250a6", 88 | "shasum": "" 89 | }, 90 | "require": { 91 | "php": ">=8.1", 92 | "symfony/deprecation-contracts": "^2.5|^3", 93 | "symfony/polyfill-mbstring": "~1.1", 94 | "symfony/polyfill-php83": "^1.27" 95 | }, 96 | "conflict": { 97 | "symfony/cache": "<6.3" 98 | }, 99 | "require-dev": { 100 | "doctrine/dbal": "^2.13.1|^3|^4", 101 | "predis/predis": "^1.1|^2.0", 102 | "symfony/cache": "^6.3", 103 | "symfony/dependency-injection": "^5.4|^6.0", 104 | "symfony/expression-language": "^5.4|^6.0", 105 | "symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4", 106 | "symfony/mime": "^5.4|^6.0", 107 | "symfony/rate-limiter": "^5.2|^6.0" 108 | }, 109 | "type": "library", 110 | "autoload": { 111 | "psr-4": { 112 | "Symfony\\Component\\HttpFoundation\\": "" 113 | }, 114 | "exclude-from-classmap": [ 115 | "/Tests/" 116 | ] 117 | }, 118 | "notification-url": "https://packagist.org/downloads/", 119 | "license": [ 120 | "MIT" 121 | ], 122 | "authors": [ 123 | { 124 | "name": "Fabien Potencier", 125 | "email": "fabien@symfony.com" 126 | }, 127 | { 128 | "name": "Symfony Community", 129 | "homepage": "https://symfony.com/contributors" 130 | } 131 | ], 132 | "description": "Defines an object-oriented layer for the HTTP specification", 133 | "homepage": "https://symfony.com", 134 | "support": { 135 | "source": "https://github.com/symfony/http-foundation/tree/v6.3.6" 136 | }, 137 | "funding": [ 138 | { 139 | "url": "https://symfony.com/sponsor", 140 | "type": "custom" 141 | }, 142 | { 143 | "url": "https://github.com/fabpot", 144 | "type": "github" 145 | }, 146 | { 147 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 148 | "type": "tidelift" 149 | } 150 | ], 151 | "time": "2023-10-17T11:32:53+00:00" 152 | }, 153 | { 154 | "name": "symfony/polyfill-mbstring", 155 | "version": "v1.28.0", 156 | "source": { 157 | "type": "git", 158 | "url": "https://github.com/symfony/polyfill-mbstring.git", 159 | "reference": "42292d99c55abe617799667f454222c54c60e229" 160 | }, 161 | "dist": { 162 | "type": "zip", 163 | "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/42292d99c55abe617799667f454222c54c60e229", 164 | "reference": "42292d99c55abe617799667f454222c54c60e229", 165 | "shasum": "" 166 | }, 167 | "require": { 168 | "php": ">=7.1" 169 | }, 170 | "provide": { 171 | "ext-mbstring": "*" 172 | }, 173 | "suggest": { 174 | "ext-mbstring": "For best performance" 175 | }, 176 | "type": "library", 177 | "extra": { 178 | "branch-alias": { 179 | "dev-main": "1.28-dev" 180 | }, 181 | "thanks": { 182 | "name": "symfony/polyfill", 183 | "url": "https://github.com/symfony/polyfill" 184 | } 185 | }, 186 | "autoload": { 187 | "files": [ 188 | "bootstrap.php" 189 | ], 190 | "psr-4": { 191 | "Symfony\\Polyfill\\Mbstring\\": "" 192 | } 193 | }, 194 | "notification-url": "https://packagist.org/downloads/", 195 | "license": [ 196 | "MIT" 197 | ], 198 | "authors": [ 199 | { 200 | "name": "Nicolas Grekas", 201 | "email": "p@tchwork.com" 202 | }, 203 | { 204 | "name": "Symfony Community", 205 | "homepage": "https://symfony.com/contributors" 206 | } 207 | ], 208 | "description": "Symfony polyfill for the Mbstring extension", 209 | "homepage": "https://symfony.com", 210 | "keywords": [ 211 | "compatibility", 212 | "mbstring", 213 | "polyfill", 214 | "portable", 215 | "shim" 216 | ], 217 | "support": { 218 | "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.28.0" 219 | }, 220 | "funding": [ 221 | { 222 | "url": "https://symfony.com/sponsor", 223 | "type": "custom" 224 | }, 225 | { 226 | "url": "https://github.com/fabpot", 227 | "type": "github" 228 | }, 229 | { 230 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 231 | "type": "tidelift" 232 | } 233 | ], 234 | "time": "2023-07-28T09:04:16+00:00" 235 | }, 236 | { 237 | "name": "symfony/polyfill-php80", 238 | "version": "v1.28.0", 239 | "source": { 240 | "type": "git", 241 | "url": "https://github.com/symfony/polyfill-php80.git", 242 | "reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5" 243 | }, 244 | "dist": { 245 | "type": "zip", 246 | "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/6caa57379c4aec19c0a12a38b59b26487dcfe4b5", 247 | "reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5", 248 | "shasum": "" 249 | }, 250 | "require": { 251 | "php": ">=7.1" 252 | }, 253 | "type": "library", 254 | "extra": { 255 | "branch-alias": { 256 | "dev-main": "1.28-dev" 257 | }, 258 | "thanks": { 259 | "name": "symfony/polyfill", 260 | "url": "https://github.com/symfony/polyfill" 261 | } 262 | }, 263 | "autoload": { 264 | "files": [ 265 | "bootstrap.php" 266 | ], 267 | "psr-4": { 268 | "Symfony\\Polyfill\\Php80\\": "" 269 | }, 270 | "classmap": [ 271 | "Resources/stubs" 272 | ] 273 | }, 274 | "notification-url": "https://packagist.org/downloads/", 275 | "license": [ 276 | "MIT" 277 | ], 278 | "authors": [ 279 | { 280 | "name": "Ion Bazan", 281 | "email": "ion.bazan@gmail.com" 282 | }, 283 | { 284 | "name": "Nicolas Grekas", 285 | "email": "p@tchwork.com" 286 | }, 287 | { 288 | "name": "Symfony Community", 289 | "homepage": "https://symfony.com/contributors" 290 | } 291 | ], 292 | "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", 293 | "homepage": "https://symfony.com", 294 | "keywords": [ 295 | "compatibility", 296 | "polyfill", 297 | "portable", 298 | "shim" 299 | ], 300 | "support": { 301 | "source": "https://github.com/symfony/polyfill-php80/tree/v1.28.0" 302 | }, 303 | "funding": [ 304 | { 305 | "url": "https://symfony.com/sponsor", 306 | "type": "custom" 307 | }, 308 | { 309 | "url": "https://github.com/fabpot", 310 | "type": "github" 311 | }, 312 | { 313 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 314 | "type": "tidelift" 315 | } 316 | ], 317 | "time": "2023-01-26T09:26:14+00:00" 318 | }, 319 | { 320 | "name": "symfony/polyfill-php83", 321 | "version": "v1.28.0", 322 | "source": { 323 | "type": "git", 324 | "url": "https://github.com/symfony/polyfill-php83.git", 325 | "reference": "b0f46ebbeeeda3e9d2faebdfbf4b4eae9b59fa11" 326 | }, 327 | "dist": { 328 | "type": "zip", 329 | "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/b0f46ebbeeeda3e9d2faebdfbf4b4eae9b59fa11", 330 | "reference": "b0f46ebbeeeda3e9d2faebdfbf4b4eae9b59fa11", 331 | "shasum": "" 332 | }, 333 | "require": { 334 | "php": ">=7.1", 335 | "symfony/polyfill-php80": "^1.14" 336 | }, 337 | "type": "library", 338 | "extra": { 339 | "branch-alias": { 340 | "dev-main": "1.28-dev" 341 | }, 342 | "thanks": { 343 | "name": "symfony/polyfill", 344 | "url": "https://github.com/symfony/polyfill" 345 | } 346 | }, 347 | "autoload": { 348 | "files": [ 349 | "bootstrap.php" 350 | ], 351 | "psr-4": { 352 | "Symfony\\Polyfill\\Php83\\": "" 353 | }, 354 | "classmap": [ 355 | "Resources/stubs" 356 | ] 357 | }, 358 | "notification-url": "https://packagist.org/downloads/", 359 | "license": [ 360 | "MIT" 361 | ], 362 | "authors": [ 363 | { 364 | "name": "Nicolas Grekas", 365 | "email": "p@tchwork.com" 366 | }, 367 | { 368 | "name": "Symfony Community", 369 | "homepage": "https://symfony.com/contributors" 370 | } 371 | ], 372 | "description": "Symfony polyfill backporting some PHP 8.3+ features to lower PHP versions", 373 | "homepage": "https://symfony.com", 374 | "keywords": [ 375 | "compatibility", 376 | "polyfill", 377 | "portable", 378 | "shim" 379 | ], 380 | "support": { 381 | "source": "https://github.com/symfony/polyfill-php83/tree/v1.28.0" 382 | }, 383 | "funding": [ 384 | { 385 | "url": "https://symfony.com/sponsor", 386 | "type": "custom" 387 | }, 388 | { 389 | "url": "https://github.com/fabpot", 390 | "type": "github" 391 | }, 392 | { 393 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 394 | "type": "tidelift" 395 | } 396 | ], 397 | "time": "2023-08-16T06:22:46+00:00" 398 | }, 399 | { 400 | "name": "symfony/routing", 401 | "version": "v6.3.5", 402 | "source": { 403 | "type": "git", 404 | "url": "https://github.com/symfony/routing.git", 405 | "reference": "82616e59acd3e3d9c916bba798326cb7796d7d31" 406 | }, 407 | "dist": { 408 | "type": "zip", 409 | "url": "https://api.github.com/repos/symfony/routing/zipball/82616e59acd3e3d9c916bba798326cb7796d7d31", 410 | "reference": "82616e59acd3e3d9c916bba798326cb7796d7d31", 411 | "shasum": "" 412 | }, 413 | "require": { 414 | "php": ">=8.1", 415 | "symfony/deprecation-contracts": "^2.5|^3" 416 | }, 417 | "conflict": { 418 | "doctrine/annotations": "<1.12", 419 | "symfony/config": "<6.2", 420 | "symfony/dependency-injection": "<5.4", 421 | "symfony/yaml": "<5.4" 422 | }, 423 | "require-dev": { 424 | "doctrine/annotations": "^1.12|^2", 425 | "psr/log": "^1|^2|^3", 426 | "symfony/config": "^6.2", 427 | "symfony/dependency-injection": "^5.4|^6.0", 428 | "symfony/expression-language": "^5.4|^6.0", 429 | "symfony/http-foundation": "^5.4|^6.0", 430 | "symfony/yaml": "^5.4|^6.0" 431 | }, 432 | "type": "library", 433 | "autoload": { 434 | "psr-4": { 435 | "Symfony\\Component\\Routing\\": "" 436 | }, 437 | "exclude-from-classmap": [ 438 | "/Tests/" 439 | ] 440 | }, 441 | "notification-url": "https://packagist.org/downloads/", 442 | "license": [ 443 | "MIT" 444 | ], 445 | "authors": [ 446 | { 447 | "name": "Fabien Potencier", 448 | "email": "fabien@symfony.com" 449 | }, 450 | { 451 | "name": "Symfony Community", 452 | "homepage": "https://symfony.com/contributors" 453 | } 454 | ], 455 | "description": "Maps an HTTP request to a set of configuration variables", 456 | "homepage": "https://symfony.com", 457 | "keywords": [ 458 | "router", 459 | "routing", 460 | "uri", 461 | "url" 462 | ], 463 | "support": { 464 | "source": "https://github.com/symfony/routing/tree/v6.3.5" 465 | }, 466 | "funding": [ 467 | { 468 | "url": "https://symfony.com/sponsor", 469 | "type": "custom" 470 | }, 471 | { 472 | "url": "https://github.com/fabpot", 473 | "type": "github" 474 | }, 475 | { 476 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 477 | "type": "tidelift" 478 | } 479 | ], 480 | "time": "2023-09-20T16:05:51+00:00" 481 | } 482 | ], 483 | "packages-dev": [], 484 | "aliases": [], 485 | "minimum-stability": "stable", 486 | "stability-flags": [], 487 | "prefer-stable": false, 488 | "prefer-lowest": false, 489 | "platform": [], 490 | "platform-dev": [], 491 | "plugin-api-version": "2.6.0" 492 | } 493 | --------------------------------------------------------------------------------