chore: update the doc and improve phpstan annotations

This commit is contained in:
Younes ENNAJI
2024-05-05 17:52:48 +01:00
parent eafa471fde
commit d2f019fb62
135 changed files with 3329 additions and 1423 deletions
+15
View File
@@ -0,0 +1,15 @@
<?php
namespace App\Entity;
readonly class Book
{
public function __construct(private string $title)
{
}
public function getFlashIdentifier(): string
{
return sprintf('"%s" book', $this->title);
}
}
+2
View File
@@ -20,10 +20,12 @@
"laravel/tinker": "^2.9",
"livewire/livewire": "^3.4",
"php-flasher/php-flasher": "@dev",
"spatie/laravel-csp": "^2.9",
"spatie/laravel-ray": "^1.36"
},
"require-dev": {
"fakerphp/faker": "^1.23",
"larastan/larastan": "^2.9",
"laravel/pint": "^1.13",
"laravel/sail": "^1.26",
"mockery/mockery": "^1.6",
+343 -13
View File
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "82f8751127532ccbc003e6cf202250d7",
"content-hash": "6a5eb94d553bf800816057a2f860bceb",
"packages": [
{
"name": "brick/math",
@@ -2484,7 +2484,7 @@
"dist": {
"type": "path",
"url": "../..",
"reference": "48f5a7fcf6f5cf84382b6be56ed6bfc20dbee649"
"reference": "f8262b2e6a75a3130fe97ce95e4b05dd3c6a5cf8"
},
"require": {
"ext-intl": "*",
@@ -2574,20 +2574,18 @@
"role": "Developer"
}
],
"description": "Elevate user engagement in Laravel and Symfony projects with PHPFlasher, a comprehensive flash messaging toolkit. This library facilitates streamlined user feedback management and supports a variety of popular notification styles including Noty, Notyf, SweetAlert, and Toastr. PHPFlasher is designed for ease of use, making it accessible to both beginners and experienced developers seeking to enhance the interactive elements of their web applications.",
"description": "The core repository for PHPFlasher, hosting the source code, contributions, issue tracking, and discussions for the PHPFlasher project. This mono-repo serves as the hub for development and community engagement.",
"homepage": "https://php-flasher.io",
"keywords": [
"customizable-alerts-php",
"contributions",
"discussions",
"flash-messages",
"interactive-web-notifications",
"laravel-notification",
"php-messaging-library",
"php-notification-system",
"php-user-interface",
"symfony-notification",
"user-engagement-php",
"user-feedback-tools",
"web-application-notifications"
"issue-tracking",
"notifications",
"open-source",
"php",
"phpflasher",
"user-feedback"
],
"support": {
"issues": "https://github.com/php-flasher/php-flasher/issues",
@@ -3625,6 +3623,148 @@
],
"time": "2023-06-28T12:59:17+00:00"
},
{
"name": "spatie/laravel-csp",
"version": "2.9.0",
"source": {
"type": "git",
"url": "https://github.com/spatie/laravel-csp.git",
"reference": "41165322b0017b1f121969cd91055a5f20bc7c47"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/spatie/laravel-csp/zipball/41165322b0017b1f121969cd91055a5f20bc7c47",
"reference": "41165322b0017b1f121969cd91055a5f20bc7c47",
"shasum": ""
},
"require": {
"illuminate/http": "^9.0|^10.0|^11.0",
"illuminate/support": "^9.0|^10.0|^11.0",
"php": "^8.1",
"spatie/laravel-package-tools": "^1.11"
},
"require-dev": {
"mockery/mockery": "^1.3.3",
"orchestra/testbench": "^7.0|^8.0|^9.0",
"pestphp/pest": "^1.23.0|^2.34.0",
"roave/security-advisories": "dev-master"
},
"type": "library",
"extra": {
"laravel": {
"providers": [
"Spatie\\Csp\\CspServiceProvider"
]
}
},
"autoload": {
"files": [
"src/helpers.php"
],
"psr-4": {
"Spatie\\Csp\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Thomas Verhelst",
"email": "tvke91@gmail.com",
"homepage": "https://spatie.be",
"role": "Developer"
},
{
"name": "Freek Van der Herten",
"email": "freek@spatie.be",
"homepage": "https://spatie.be",
"role": "Developer"
}
],
"description": "Add CSP headers to the responses of a Laravel app",
"homepage": "https://github.com/spatie/laravel-csp",
"keywords": [
"content-security-policy",
"csp",
"headers",
"laravel",
"laravel-csp",
"security",
"spatie"
],
"support": {
"source": "https://github.com/spatie/laravel-csp/tree/2.9.0"
},
"funding": [
{
"url": "https://spatie.be/open-source/support-us",
"type": "custom"
}
],
"time": "2024-02-27T12:13:22+00:00"
},
{
"name": "spatie/laravel-package-tools",
"version": "1.16.4",
"source": {
"type": "git",
"url": "https://github.com/spatie/laravel-package-tools.git",
"reference": "ddf678e78d7f8b17e5cdd99c0c3413a4a6592e53"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/spatie/laravel-package-tools/zipball/ddf678e78d7f8b17e5cdd99c0c3413a4a6592e53",
"reference": "ddf678e78d7f8b17e5cdd99c0c3413a4a6592e53",
"shasum": ""
},
"require": {
"illuminate/contracts": "^9.28|^10.0|^11.0",
"php": "^8.0"
},
"require-dev": {
"mockery/mockery": "^1.5",
"orchestra/testbench": "^7.7|^8.0",
"pestphp/pest": "^1.22",
"phpunit/phpunit": "^9.5.24",
"spatie/pest-plugin-test-time": "^1.1"
},
"type": "library",
"autoload": {
"psr-4": {
"Spatie\\LaravelPackageTools\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Freek Van der Herten",
"email": "freek@spatie.be",
"role": "Developer"
}
],
"description": "Tools for creating Laravel packages",
"homepage": "https://github.com/spatie/laravel-package-tools",
"keywords": [
"laravel-package-tools",
"spatie"
],
"support": {
"issues": "https://github.com/spatie/laravel-package-tools/issues",
"source": "https://github.com/spatie/laravel-package-tools/tree/1.16.4"
},
"funding": [
{
"url": "https://github.com/spatie",
"type": "github"
}
],
"time": "2024-03-20T07:29:11+00:00"
},
{
"name": "spatie/laravel-ray",
"version": "1.36.0",
@@ -7205,6 +7345,108 @@
},
"time": "2024-03-08T09:58:59+00:00"
},
{
"name": "larastan/larastan",
"version": "v2.9.5",
"source": {
"type": "git",
"url": "https://github.com/larastan/larastan.git",
"reference": "101f1a4470f87326f4d3995411d28679d8800abe"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/larastan/larastan/zipball/101f1a4470f87326f4d3995411d28679d8800abe",
"reference": "101f1a4470f87326f4d3995411d28679d8800abe",
"shasum": ""
},
"require": {
"ext-json": "*",
"illuminate/console": "^9.52.16 || ^10.28.0 || ^11.0",
"illuminate/container": "^9.52.16 || ^10.28.0 || ^11.0",
"illuminate/contracts": "^9.52.16 || ^10.28.0 || ^11.0",
"illuminate/database": "^9.52.16 || ^10.28.0 || ^11.0",
"illuminate/http": "^9.52.16 || ^10.28.0 || ^11.0",
"illuminate/pipeline": "^9.52.16 || ^10.28.0 || ^11.0",
"illuminate/support": "^9.52.16 || ^10.28.0 || ^11.0",
"php": "^8.0.2",
"phpmyadmin/sql-parser": "^5.9.0",
"phpstan/phpstan": "^1.10.66"
},
"require-dev": {
"doctrine/coding-standard": "^12.0",
"nikic/php-parser": "^4.19.1",
"orchestra/canvas": "^7.11.1 || ^8.11.0 || ^9.0.2",
"orchestra/testbench": "^7.33.0 || ^8.13.0 || ^9.0.3",
"phpunit/phpunit": "^9.6.13 || ^10.5.16"
},
"suggest": {
"orchestra/testbench": "Using Larastan for analysing a package needs Testbench"
},
"type": "phpstan-extension",
"extra": {
"branch-alias": {
"dev-master": "2.0-dev"
},
"phpstan": {
"includes": [
"extension.neon"
]
}
},
"autoload": {
"psr-4": {
"Larastan\\Larastan\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Can Vural",
"email": "can9119@gmail.com"
},
{
"name": "Nuno Maduro",
"email": "enunomaduro@gmail.com"
}
],
"description": "Larastan - Discover bugs in your code without running it. A phpstan/phpstan wrapper for Laravel",
"keywords": [
"PHPStan",
"code analyse",
"code analysis",
"larastan",
"laravel",
"package",
"php",
"static analysis"
],
"support": {
"issues": "https://github.com/larastan/larastan/issues",
"source": "https://github.com/larastan/larastan/tree/v2.9.5"
},
"funding": [
{
"url": "https://www.paypal.com/paypalme/enunomaduro",
"type": "custom"
},
{
"url": "https://github.com/canvural",
"type": "github"
},
{
"url": "https://github.com/nunomaduro",
"type": "github"
},
{
"url": "https://www.patreon.com/nunomaduro",
"type": "patreon"
}
],
"time": "2024-04-16T19:13:34+00:00"
},
{
"name": "laravel/pint",
"version": "v1.15.1",
@@ -8182,6 +8424,94 @@
},
"time": "2024-02-23T11:10:43+00:00"
},
{
"name": "phpmyadmin/sql-parser",
"version": "5.9.0",
"source": {
"type": "git",
"url": "https://github.com/phpmyadmin/sql-parser.git",
"reference": "011fa18a4e55591fac6545a821921dd1d61c6984"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpmyadmin/sql-parser/zipball/011fa18a4e55591fac6545a821921dd1d61c6984",
"reference": "011fa18a4e55591fac6545a821921dd1d61c6984",
"shasum": ""
},
"require": {
"php": "^7.2 || ^8.0",
"symfony/polyfill-mbstring": "^1.3",
"symfony/polyfill-php80": "^1.16"
},
"conflict": {
"phpmyadmin/motranslator": "<3.0"
},
"require-dev": {
"phpbench/phpbench": "^1.1",
"phpmyadmin/coding-standard": "^3.0",
"phpmyadmin/motranslator": "^4.0 || ^5.0",
"phpstan/extension-installer": "^1.1",
"phpstan/phpstan": "^1.9.12",
"phpstan/phpstan-phpunit": "^1.3.3",
"phpunit/php-code-coverage": "*",
"phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
"psalm/plugin-phpunit": "^0.16.1",
"vimeo/psalm": "^4.11",
"zumba/json-serializer": "~3.0.2"
},
"suggest": {
"ext-mbstring": "For best performance",
"phpmyadmin/motranslator": "Translate messages to your favorite locale"
},
"bin": [
"bin/highlight-query",
"bin/lint-query",
"bin/sql-parser",
"bin/tokenize-query"
],
"type": "library",
"autoload": {
"psr-4": {
"PhpMyAdmin\\SqlParser\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"GPL-2.0-or-later"
],
"authors": [
{
"name": "The phpMyAdmin Team",
"email": "developers@phpmyadmin.net",
"homepage": "https://www.phpmyadmin.net/team/"
}
],
"description": "A validating SQL lexer and parser with a focus on MySQL dialect.",
"homepage": "https://github.com/phpmyadmin/sql-parser",
"keywords": [
"analysis",
"lexer",
"parser",
"query linter",
"sql",
"sql lexer",
"sql linter",
"sql parser",
"sql syntax highlighter",
"sql tokenizer"
],
"support": {
"issues": "https://github.com/phpmyadmin/sql-parser/issues",
"source": "https://github.com/phpmyadmin/sql-parser"
},
"funding": [
{
"url": "https://www.phpmyadmin.net/donate/",
"type": "other"
}
],
"time": "2024-01-20T20:34:02+00:00"
},
{
"name": "phpstan/phpdoc-parser",
"version": "1.28.0",
+7
View File
@@ -0,0 +1,7 @@
includes:
- vendor/larastan/larastan/extension.neon
parameters:
level: 9
paths:
- routes/
+3 -11
View File
@@ -2,18 +2,10 @@
<html>
<head>
<meta charset="UTF-8">
<title>flash</title>
<title>PHPFlasher</title>
<link rel="icon" href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 128 128%22><text y=%221.2em%22 font-size=%2296%22>⚫️</text><text y=%221.3em%22 x=%220.2em%22 font-size=%2276%22 fill=%22%23fff%22>sf</text></svg>">
</head>
<body>
<ul>
<li><a href="/">/</a></li>
<li><a href="/adapter/flasher">/adapter/flasher</a></li>
<li><a href="/adapter/noty">/adapter/noty</a></li>
<li><a href="/adapter/notyf">/adapter/notyf</a></li>
<li><a href="/adapter/sweetalert">/adapter/sweetalert</a></li>
<li><a href="/adapter/toastr">/adapter/toastr</a></li>
<li><a href="/livewire/counter">/adapter/livewire/counter</a></li>
<li><a href="/livewire/eventous">/adapter/livewire/eventous</a></li>
</ul>
</body>
</html>
+9 -34
View File
@@ -1,42 +1,17 @@
<?php
use Flasher\Prime\FlasherInterface;
use App\Entity\Book;
use Illuminate\Support\Facades\Route;
Route::get('/', function () {
session()->flash('success', 'Hello from default Symfony');
// sweetalert()->timerProgressBar()->success('hello from Home Controller');
// noty()->layout('topCenter')->success('hello from Home Controller');
// notyf()->ripple(false)->warning('hello from Home Controller');
// toastr()->positionClass('toast-bottom-left')->error('hello from Home Controller');
// flash()->use('flasher')->success('hello from flasher factory');
return <<<HTML
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>flash</title>
</head>
<body>
<ul>
<li><a href="/">/</a></li>
<li><a href="/adapter/flasher">/adapter/flasher</a></li>
<li><a href="/adapter/noty">/adapter/noty</a></li>
<li><a href="/adapter/notyf">/adapter/notyf</a></li>
<li><a href="/adapter/sweetalert">/adapter/sweetalert</a></li>
<li><a href="/adapter/toastr">/adapter/toastr</a></li>
</ul>
</body>
</html>
HTML;
})->name('app_home');
Route::get('/adapter/{adapter}', function (FlasherInterface $flasher, string $adapter) {
$factory = $flasher->create($adapter);
$factory->success('Operation completed successfully.');
$factory->info('Please note that some information has been updated.');
$factory->warning('This action could have potential consequences.');
$factory->error('An error occurred while processing your request.');
flash()->created(new Book('lord of the rings'));
flash()->saved(new Book('harry potter'));
return view('welcome');
})->name('app_adapter');
Route::get('/livewire/counter', \App\Livewire\Counter::class);
Route::get('/livewire/eventous', \App\Livewire\Eventous::class);
})->name('app_home');
+1
View File
@@ -16,6 +16,7 @@
"php": ">=8.2",
"ext-ctype": "*",
"ext-iconv": "*",
"nelmio/security-bundle": "^3.3",
"php-flasher/php-flasher": "@dev",
"phpstan/phpstan-symfony": "^1.3",
"symfony/console": "7.0.*",
+723 -38
View File
@@ -4,15 +4,164 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "9354bb44b6ee822835a32d7bdc0258dc",
"content-hash": "fdaf8a5cf22e2d2c4ac44c9f4217ef9a",
"packages": [
{
"name": "composer/ca-bundle",
"version": "1.5.0",
"source": {
"type": "git",
"url": "https://github.com/composer/ca-bundle.git",
"reference": "0c5ccfcfea312b5c5a190a21ac5cef93f74baf99"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/composer/ca-bundle/zipball/0c5ccfcfea312b5c5a190a21ac5cef93f74baf99",
"reference": "0c5ccfcfea312b5c5a190a21ac5cef93f74baf99",
"shasum": ""
},
"require": {
"ext-openssl": "*",
"ext-pcre": "*",
"php": "^7.2 || ^8.0"
},
"require-dev": {
"phpstan/phpstan": "^1.10",
"psr/log": "^1.0",
"symfony/phpunit-bridge": "^4.2 || ^5",
"symfony/process": "^4.0 || ^5.0 || ^6.0 || ^7.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.x-dev"
}
},
"autoload": {
"psr-4": {
"Composer\\CaBundle\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Jordi Boggiano",
"email": "j.boggiano@seld.be",
"homepage": "http://seld.be"
}
],
"description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.",
"keywords": [
"cabundle",
"cacert",
"certificate",
"ssl",
"tls"
],
"support": {
"irc": "irc://irc.freenode.org/composer",
"issues": "https://github.com/composer/ca-bundle/issues",
"source": "https://github.com/composer/ca-bundle/tree/1.5.0"
},
"funding": [
{
"url": "https://packagist.com",
"type": "custom"
},
{
"url": "https://github.com/composer",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/composer/composer",
"type": "tidelift"
}
],
"time": "2024-03-15T14:00:32+00:00"
},
{
"name": "nelmio/security-bundle",
"version": "v3.3.0",
"source": {
"type": "git",
"url": "https://github.com/nelmio/NelmioSecurityBundle.git",
"reference": "6a6c75ef6342385ef732f0b5afa705660177250f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/nelmio/NelmioSecurityBundle/zipball/6a6c75ef6342385ef732f0b5afa705660177250f",
"reference": "6a6c75ef6342385ef732f0b5afa705660177250f",
"shasum": ""
},
"require": {
"php": "^7.4 || ^8.0",
"symfony/framework-bundle": "^5.4 || ^6.3 || ^7.0",
"symfony/http-kernel": "^5.4 || ^6.3 || ^7.0",
"symfony/security-core": "^5.4 || ^6.3 || ^7.0",
"symfony/security-csrf": "^5.4 || ^6.3 || ^7.0",
"symfony/security-http": "^5.4 || ^6.3 || ^7.0",
"symfony/yaml": "^5.4 || ^6.3 || ^7.0",
"ua-parser/uap-php": "^3.4.4"
},
"require-dev": {
"phpstan/phpstan": "^1.4",
"phpstan/phpstan-deprecation-rules": "^1.0",
"phpstan/phpstan-phpunit": "^1.0",
"phpstan/phpstan-strict-rules": "^1.1",
"phpstan/phpstan-symfony": "^1.1",
"phpunit/phpunit": "^9.5",
"psr/cache": "^1.0 || ^2.0 || ^3.0",
"symfony/browser-kit": "^5.4 || ^6.3 || ^7.0",
"symfony/cache": "^5.4 || ^6.3 || ^7.0",
"symfony/phpunit-bridge": "^6.3 || ^7.0",
"symfony/twig-bundle": "^5.4 || ^6.3 || ^7.0",
"twig/twig": "^2.10 || ^3.0"
},
"type": "symfony-bundle",
"extra": {
"branch-alias": {
"dev-master": "3.x-dev"
}
},
"autoload": {
"psr-4": {
"Nelmio\\SecurityBundle\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Nelmio",
"homepage": "http://nelm.io"
},
{
"name": "Symfony Community",
"homepage": "https://github.com/nelmio/NelmioSecurityBundle/contributors"
}
],
"description": "Extra security-related features for Symfony: signed/encrypted cookies, HTTPS/SSL/HSTS handling, cookie session storage, ...",
"keywords": [
"security"
],
"support": {
"issues": "https://github.com/nelmio/NelmioSecurityBundle/issues",
"source": "https://github.com/nelmio/NelmioSecurityBundle/tree/v3.3.0"
},
"time": "2024-04-10T08:11:27+00:00"
},
{
"name": "php-flasher/php-flasher",
"version": "2.x-dev",
"dist": {
"type": "path",
"url": "../..",
"reference": "14646df9e5bba5ca45b53815ea28228f2e6b9720"
"reference": "f8262b2e6a75a3130fe97ce95e4b05dd3c6a5cf8"
},
"require": {
"ext-intl": "*",
@@ -126,16 +275,16 @@
},
{
"name": "phpstan/phpstan",
"version": "1.10.66",
"version": "1.10.67",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpstan.git",
"reference": "94779c987e4ebd620025d9e5fdd23323903950bd"
"reference": "16ddbe776f10da6a95ebd25de7c1dbed397dc493"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpstan/phpstan/zipball/94779c987e4ebd620025d9e5fdd23323903950bd",
"reference": "94779c987e4ebd620025d9e5fdd23323903950bd",
"url": "https://api.github.com/repos/phpstan/phpstan/zipball/16ddbe776f10da6a95ebd25de7c1dbed397dc493",
"reference": "16ddbe776f10da6a95ebd25de7c1dbed397dc493",
"shasum": ""
},
"require": {
@@ -178,26 +327,22 @@
{
"url": "https://github.com/phpstan",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/phpstan/phpstan",
"type": "tidelift"
}
],
"time": "2024-03-28T16:17:31+00:00"
"time": "2024-04-16T07:22:02+00:00"
},
{
"name": "phpstan/phpstan-symfony",
"version": "1.3.9",
"version": "1.3.12",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpstan-symfony.git",
"reference": "a32bc86da24495025d7aafd1ba62444d4a364a98"
"reference": "f4b9407fa3203aebafd422ae8f0eb1ef94659a80"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpstan/phpstan-symfony/zipball/a32bc86da24495025d7aafd1ba62444d4a364a98",
"reference": "a32bc86da24495025d7aafd1ba62444d4a364a98",
"url": "https://api.github.com/repos/phpstan/phpstan-symfony/zipball/f4b9407fa3203aebafd422ae8f0eb1ef94659a80",
"reference": "f4b9407fa3203aebafd422ae8f0eb1ef94659a80",
"shasum": ""
},
"require": {
@@ -254,9 +399,9 @@
"description": "Symfony Framework extensions and rules for PHPStan",
"support": {
"issues": "https://github.com/phpstan/phpstan-symfony/issues",
"source": "https://github.com/phpstan/phpstan-symfony/tree/1.3.9"
"source": "https://github.com/phpstan/phpstan-symfony/tree/1.3.12"
},
"time": "2024-03-16T16:50:20+00:00"
"time": "2024-04-14T13:30:23+00:00"
},
{
"name": "psr/cache",
@@ -1779,6 +1924,78 @@
],
"time": "2024-04-03T06:12:25+00:00"
},
{
"name": "symfony/password-hasher",
"version": "v7.0.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/password-hasher.git",
"reference": "0eba656c16ecdf5588b3ddd2b2337b06173d839f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/password-hasher/zipball/0eba656c16ecdf5588b3ddd2b2337b06173d839f",
"reference": "0eba656c16ecdf5588b3ddd2b2337b06173d839f",
"shasum": ""
},
"require": {
"php": ">=8.2"
},
"conflict": {
"symfony/security-core": "<6.4"
},
"require-dev": {
"symfony/console": "^6.4|^7.0",
"symfony/security-core": "^6.4|^7.0"
},
"type": "library",
"autoload": {
"psr-4": {
"Symfony\\Component\\PasswordHasher\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Robin Chalas",
"email": "robin.chalas@gmail.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Provides password hashing utilities",
"homepage": "https://symfony.com",
"keywords": [
"hashing",
"password"
],
"support": {
"source": "https://github.com/symfony/password-hasher/tree/v7.0.4"
},
"funding": [
{
"url": "https://symfony.com/sponsor",
"type": "custom"
},
{
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2024-02-12T11:15:03+00:00"
},
{
"name": "symfony/polyfill-intl-grapheme",
"version": "v1.29.0",
@@ -2095,6 +2312,165 @@
],
"time": "2024-01-29T20:11:03+00:00"
},
{
"name": "symfony/property-access",
"version": "v7.0.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/property-access.git",
"reference": "1c268ba954ccc5e78cf035b391abb67759e24423"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/property-access/zipball/1c268ba954ccc5e78cf035b391abb67759e24423",
"reference": "1c268ba954ccc5e78cf035b391abb67759e24423",
"shasum": ""
},
"require": {
"php": ">=8.2",
"symfony/property-info": "^6.4|^7.0"
},
"require-dev": {
"symfony/cache": "^6.4|^7.0"
},
"type": "library",
"autoload": {
"psr-4": {
"Symfony\\Component\\PropertyAccess\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Provides functions to read and write from/to an object or array using a simple string notation",
"homepage": "https://symfony.com",
"keywords": [
"access",
"array",
"extraction",
"index",
"injection",
"object",
"property",
"property-path",
"reflection"
],
"support": {
"source": "https://github.com/symfony/property-access/tree/v7.0.6"
},
"funding": [
{
"url": "https://symfony.com/sponsor",
"type": "custom"
},
{
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2024-03-19T11:57:22+00:00"
},
{
"name": "symfony/property-info",
"version": "v7.0.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/property-info.git",
"reference": "b8844ddce7d53f78b57ec9be59da80fceddf3167"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/property-info/zipball/b8844ddce7d53f78b57ec9be59da80fceddf3167",
"reference": "b8844ddce7d53f78b57ec9be59da80fceddf3167",
"shasum": ""
},
"require": {
"php": ">=8.2",
"symfony/string": "^6.4|^7.0"
},
"conflict": {
"phpdocumentor/reflection-docblock": "<5.2",
"phpdocumentor/type-resolver": "<1.5.1",
"symfony/dependency-injection": "<6.4",
"symfony/serializer": "<6.4"
},
"require-dev": {
"phpdocumentor/reflection-docblock": "^5.2",
"phpstan/phpdoc-parser": "^1.0",
"symfony/cache": "^6.4|^7.0",
"symfony/dependency-injection": "^6.4|^7.0",
"symfony/serializer": "^6.4|^7.0"
},
"type": "library",
"autoload": {
"psr-4": {
"Symfony\\Component\\PropertyInfo\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Kévin Dunglas",
"email": "dunglas@gmail.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Extracts information about PHP class' properties using metadata of popular sources",
"homepage": "https://symfony.com",
"keywords": [
"doctrine",
"phpdoc",
"property",
"symfony",
"type",
"validator"
],
"support": {
"source": "https://github.com/symfony/property-info/tree/v7.0.6"
},
"funding": [
{
"url": "https://symfony.com/sponsor",
"type": "custom"
},
{
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2024-03-28T09:20:36+00:00"
},
{
"name": "symfony/routing",
"version": "v7.0.6",
@@ -2255,6 +2631,245 @@
],
"time": "2024-01-23T15:02:46+00:00"
},
{
"name": "symfony/security-core",
"version": "v7.0.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/security-core.git",
"reference": "72b9d961a5dcd21e6bc29b99df51a9000a15dde0"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/security-core/zipball/72b9d961a5dcd21e6bc29b99df51a9000a15dde0",
"reference": "72b9d961a5dcd21e6bc29b99df51a9000a15dde0",
"shasum": ""
},
"require": {
"php": ">=8.2",
"symfony/event-dispatcher-contracts": "^2.5|^3",
"symfony/password-hasher": "^6.4|^7.0",
"symfony/service-contracts": "^2.5|^3"
},
"conflict": {
"symfony/event-dispatcher": "<6.4",
"symfony/http-foundation": "<6.4",
"symfony/ldap": "<6.4",
"symfony/translation": "<6.4.3|>=7.0,<7.0.3",
"symfony/validator": "<6.4"
},
"require-dev": {
"psr/cache": "^1.0|^2.0|^3.0",
"psr/container": "^1.1|^2.0",
"psr/log": "^1|^2|^3",
"symfony/cache": "^6.4|^7.0",
"symfony/event-dispatcher": "^6.4|^7.0",
"symfony/expression-language": "^6.4|^7.0",
"symfony/http-foundation": "^6.4|^7.0",
"symfony/ldap": "^6.4|^7.0",
"symfony/string": "^6.4|^7.0",
"symfony/translation": "^6.4.3|^7.0.3",
"symfony/validator": "^6.4|^7.0"
},
"type": "library",
"autoload": {
"psr-4": {
"Symfony\\Component\\Security\\Core\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony Security Component - Core Library",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/security-core/tree/v7.0.3"
},
"funding": [
{
"url": "https://symfony.com/sponsor",
"type": "custom"
},
{
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2024-01-23T15:02:46+00:00"
},
{
"name": "symfony/security-csrf",
"version": "v7.0.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/security-csrf.git",
"reference": "f0f724e599f069b768e335e4bdf795726c7dfe8e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/security-csrf/zipball/f0f724e599f069b768e335e4bdf795726c7dfe8e",
"reference": "f0f724e599f069b768e335e4bdf795726c7dfe8e",
"shasum": ""
},
"require": {
"php": ">=8.2",
"symfony/security-core": "^6.4|^7.0"
},
"conflict": {
"symfony/http-foundation": "<6.4"
},
"require-dev": {
"symfony/http-foundation": "^6.4|^7.0"
},
"type": "library",
"autoload": {
"psr-4": {
"Symfony\\Component\\Security\\Csrf\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony Security Component - CSRF Library",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/security-csrf/tree/v7.0.3"
},
"funding": [
{
"url": "https://symfony.com/sponsor",
"type": "custom"
},
{
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2024-01-23T15:02:46+00:00"
},
{
"name": "symfony/security-http",
"version": "v7.0.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/security-http.git",
"reference": "f3a70a937128f47366821a9f4b5dbfaa0ba9c862"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/security-http/zipball/f3a70a937128f47366821a9f4b5dbfaa0ba9c862",
"reference": "f3a70a937128f47366821a9f4b5dbfaa0ba9c862",
"shasum": ""
},
"require": {
"php": ">=8.2",
"symfony/http-foundation": "^6.4|^7.0",
"symfony/http-kernel": "^6.4|^7.0",
"symfony/polyfill-mbstring": "~1.0",
"symfony/property-access": "^6.4|^7.0",
"symfony/security-core": "^6.4|^7.0",
"symfony/service-contracts": "^2.5|^3"
},
"conflict": {
"symfony/clock": "<6.4",
"symfony/event-dispatcher": "<6.4",
"symfony/http-client-contracts": "<3.0",
"symfony/security-bundle": "<6.4",
"symfony/security-csrf": "<6.4"
},
"require-dev": {
"psr/log": "^1|^2|^3",
"symfony/cache": "^6.4|^7.0",
"symfony/clock": "^6.4|^7.0",
"symfony/expression-language": "^6.4|^7.0",
"symfony/http-client-contracts": "^3.0",
"symfony/rate-limiter": "^6.4|^7.0",
"symfony/routing": "^6.4|^7.0",
"symfony/security-csrf": "^6.4|^7.0",
"symfony/translation": "^6.4|^7.0",
"web-token/jwt-checker": "^3.1",
"web-token/jwt-signature-algorithm-ecdsa": "^3.1"
},
"type": "library",
"autoload": {
"psr-4": {
"Symfony\\Component\\Security\\Http\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony Security Component - HTTP Integration",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/security-http/tree/v7.0.4"
},
"funding": [
{
"url": "https://symfony.com/sponsor",
"type": "custom"
},
{
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2024-02-26T07:52:39+00:00"
},
{
"name": "symfony/service-contracts",
"version": "v3.4.2",
@@ -3019,34 +3634,34 @@
},
{
"name": "twig/extra-bundle",
"version": "v3.8.0",
"version": "v3.9.0",
"source": {
"type": "git",
"url": "https://github.com/twigphp/twig-extra-bundle.git",
"reference": "32807183753de0388c8e59f7ac2d13bb47311140"
"reference": "3a68ffc7747ecc25823cabe2127710ced516a16a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/twigphp/twig-extra-bundle/zipball/32807183753de0388c8e59f7ac2d13bb47311140",
"reference": "32807183753de0388c8e59f7ac2d13bb47311140",
"url": "https://api.github.com/repos/twigphp/twig-extra-bundle/zipball/3a68ffc7747ecc25823cabe2127710ced516a16a",
"reference": "3a68ffc7747ecc25823cabe2127710ced516a16a",
"shasum": ""
},
"require": {
"php": ">=7.2.5",
"symfony/framework-bundle": "^5.4|^6.0|^7.0",
"symfony/twig-bundle": "^5.4|^6.0|^7.0",
"symfony/framework-bundle": "^5.4|^6.4|^7.0",
"symfony/twig-bundle": "^5.4|^6.4|^7.0",
"twig/twig": "^3.0"
},
"require-dev": {
"league/commonmark": "^1.0|^2.0",
"symfony/phpunit-bridge": "^6.4|^7.0",
"twig/cache-extra": "^3.0",
"twig/cssinliner-extra": "^2.12|^3.0",
"twig/html-extra": "^2.12|^3.0",
"twig/inky-extra": "^2.12|^3.0",
"twig/intl-extra": "^2.12|^3.0",
"twig/markdown-extra": "^2.12|^3.0",
"twig/string-extra": "^2.12|^3.0"
"twig/cssinliner-extra": "^3.0",
"twig/html-extra": "^3.0",
"twig/inky-extra": "^3.0",
"twig/intl-extra": "^3.0",
"twig/markdown-extra": "^3.0",
"twig/string-extra": "^3.0"
},
"type": "symfony-bundle",
"autoload": {
@@ -3077,7 +3692,7 @@
"twig"
],
"support": {
"source": "https://github.com/twigphp/twig-extra-bundle/tree/v3.8.0"
"source": "https://github.com/twigphp/twig-extra-bundle/tree/v3.9.0"
},
"funding": [
{
@@ -3089,34 +3704,41 @@
"type": "tidelift"
}
],
"time": "2023-11-21T14:02:01+00:00"
"time": "2024-02-07T08:24:24+00:00"
},
{
"name": "twig/twig",
"version": "v3.8.0",
"version": "v3.9.0",
"source": {
"type": "git",
"url": "https://github.com/twigphp/Twig.git",
"reference": "9d15f0ac07f44dc4217883ec6ae02fd555c6f71d"
"reference": "47857eebb197745f66369b76c044a2359e3cc5b9"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/twigphp/Twig/zipball/9d15f0ac07f44dc4217883ec6ae02fd555c6f71d",
"reference": "9d15f0ac07f44dc4217883ec6ae02fd555c6f71d",
"url": "https://api.github.com/repos/twigphp/Twig/zipball/47857eebb197745f66369b76c044a2359e3cc5b9",
"reference": "47857eebb197745f66369b76c044a2359e3cc5b9",
"shasum": ""
},
"require": {
"php": ">=7.2.5",
"symfony/deprecation-contracts": "^2.5|^3",
"symfony/polyfill-ctype": "^1.8",
"symfony/polyfill-mbstring": "^1.3",
"symfony/polyfill-php80": "^1.22"
},
"require-dev": {
"psr/container": "^1.0|^2.0",
"symfony/phpunit-bridge": "^5.4.9|^6.3|^7.0"
"symfony/phpunit-bridge": "^5.4.9|^6.4|^7.0"
},
"type": "library",
"autoload": {
"files": [
"src/Resources/core.php",
"src/Resources/debug.php",
"src/Resources/escaper.php",
"src/Resources/string_loader.php"
],
"psr-4": {
"Twig\\": "src/"
}
@@ -3149,7 +3771,7 @@
],
"support": {
"issues": "https://github.com/twigphp/Twig/issues",
"source": "https://github.com/twigphp/Twig/tree/v3.8.0"
"source": "https://github.com/twigphp/Twig/tree/v3.9.0"
},
"funding": [
{
@@ -3161,7 +3783,70 @@
"type": "tidelift"
}
],
"time": "2023-11-21T18:54:41+00:00"
"time": "2024-04-16T16:04:21+00:00"
},
{
"name": "ua-parser/uap-php",
"version": "v3.9.14",
"source": {
"type": "git",
"url": "https://github.com/ua-parser/uap-php.git",
"reference": "b796c5ea5df588e65aeb4e2c6cce3811dec4fed6"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/ua-parser/uap-php/zipball/b796c5ea5df588e65aeb4e2c6cce3811dec4fed6",
"reference": "b796c5ea5df588e65aeb4e2c6cce3811dec4fed6",
"shasum": ""
},
"require": {
"composer/ca-bundle": "^1.1",
"php": "^7.2 || ^8.0"
},
"require-dev": {
"phpstan/phpstan": "^0.12.33",
"phpunit/phpunit": "^8 || ^9",
"symfony/console": "^3.4 || ^4.2 || ^4.3 || ^5.0",
"symfony/filesystem": "^3.4 || ^4.2 || ^4.3 || ^5.0",
"symfony/finder": "^3.4 || ^4.2 || ^4.3 || ^5.0",
"symfony/yaml": "^3.4 || ^4.2 || ^4.3 || ^5.0",
"vimeo/psalm": "^3.12"
},
"suggest": {
"symfony/console": "Required for CLI usage - ^3.4 || ^4.3 || ^5.0",
"symfony/filesystem": "Required for CLI usage - ^3.4 || ^4.3 || ^5.0",
"symfony/finder": "Required for CLI usage - ^3.4 || ^4.3 || ^5.0",
"symfony/yaml": "Required for CLI usage - ^3.4 || ^4.3 || ^5.0"
},
"bin": [
"bin/uaparser"
],
"type": "library",
"autoload": {
"psr-4": {
"UAParser\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Dave Olsen",
"email": "dmolsen@gmail.com"
},
{
"name": "Lars Strojny",
"email": "lars@strojny.net"
}
],
"description": "A multi-language port of Browserscope's user agent parser.",
"support": {
"issues": "https://github.com/ua-parser/uap-php/issues",
"source": "https://github.com/ua-parser/uap-php/tree/v3.9.14"
},
"time": "2020-10-02T23:36:20+00:00"
}
],
"packages-dev": [
+1
View File
@@ -10,4 +10,5 @@ return [
Symfony\Bundle\TwigBundle\TwigBundle::class => ['all' => true],
Twig\Extra\TwigExtraBundle\TwigExtraBundle::class => ['all' => true],
Symfony\Bundle\MakerBundle\MakerBundle::class => ['dev' => true],
Nelmio\SecurityBundle\NelmioSecurityBundle::class => ['all' => true],
];
@@ -0,0 +1,33 @@
nelmio_security:
# prevents framing of the entire site
clickjacking:
paths:
'^/.*': DENY
# disables content type sniffing for script resources
content_type:
nosniff: true
# forces Microsoft's XSS-Protection with
# its block mode
xss_protection:
enabled: true
mode_block: true
# Send a full URL in the `Referer` header when performing a same-origin request,
# only send the origin of the document to secure destination (HTTPS->HTTPS),
# and send no header to a less secure destination (HTTPS->HTTP).
# If `strict-origin-when-cross-origin` is not supported, use `no-referrer` policy,
# no referrer information is sent along with requests.
referrer_policy:
enabled: true
policies:
- 'no-referrer'
- 'strict-origin-when-cross-origin'
csp:
enabled: true
enforce:
script-src:
- 'self'
-2
View File
@@ -1,5 +1,3 @@
includes:
- vendor/php-flasher/php-flasher/src/Prime/extension.neon
parameters:
level: 9
paths:
+11 -11
View File
@@ -2,7 +2,7 @@
namespace App\Controller;
use Flasher\Prime\FlasherInterface;
use App\Entity\Book;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
@@ -10,19 +10,19 @@ use Symfony\Component\Routing\Attribute\Route;
class HomeController extends AbstractController
{
#[Route('/', name: 'app_home')]
public function index(FlasherInterface $flasher): Response
public function index(): Response
{
$this->addFlash('success', 'welcome from php-flasher');
sweetalert()->timerProgressBar()->success('hello from Home Controller');
noty()->layout('topCenter')->success('hello from Home Controller');
notyf()->ripple(false)->warning('hello from Home Controller');
toastr()->positionClass('toast-bottom-left')->error('hello from Home Controller');
flash()->use('flasher')->success('hello from flasher factory');
flash()->info('hello from Home Controller', ['timeout' => 60000]);
$flasher->info('hello from Home Controller', ['timeout' => 60000]);
flash()->created(new Book('lord of the rings'));
flash()->saved(new Book('harry potter'));
sweetalert()->success('hello from Home Controller', ['timeout' => 60000]);
noty()->success('hello from Home Controller', ['timeout' => 60000]);
notyf()->warning('hello from Home Controller', ['timeout' => 60000]);
toastr()->error('hello from Home Controller', ['timeout' => 60000]);
\Flasher\Toastr\Prime\toastr()->error('hello from Home Controller', ['timeout' => 60000]);
// flash()->updated();
// flash()->deleted();
return $this->render('home/index.html.twig', [
'controller_name' => 'HomeController',
+15
View File
@@ -0,0 +1,15 @@
<?php
namespace App\Entity;
readonly class Book
{
public function __construct(private string $title)
{
}
public function getFlashIdentifier(): string
{
return sprintf('"%s" book', $this->title);
}
}
+12
View File
@@ -1,4 +1,16 @@
{
"nelmio/security-bundle": {
"version": "3.3",
"recipe": {
"repo": "github.com/symfony/recipes",
"branch": "main",
"version": "2.4",
"ref": "65726efb67ff51d89de38195bc0d230fa811f64d"
},
"files": [
"config/packages/nelmio_security.yaml"
]
},
"phpstan/phpstan": {
"version": "1.10",
"recipe": {
+1 -14
View File
@@ -1,20 +1,7 @@
{% extends 'base.html.twig' %}
{% block title %}Hello HomeController!{% endblock %}
{% block title %}PHPFlasher{% endblock %}
{% block body %}
<style>
.example-wrapper { margin: 1em auto; max-width: 800px; width: 95%; font: 18px/1.5 sans-serif; }
.example-wrapper code { background: #F5F5F5; padding: 2px 6px; }
</style>
<div class="example-wrapper">
<h1>Hello {{ controller_name }}! ✅</h1>
This friendly message is coming from:
<ul>
<li>Your controller at <code>/Users/yoeunes/projects/wips/flashy/src/Controller/HomeController.php</code></li>
<li>Your template at <code>/Users/yoeunes/projects/wips/flashy/templates/home/index.html.twig</code></li>
</ul>
</div>
{% endblock %}