Last major update: 25.08.2020
- Что такое авторизация/аутентификация
- Где хранить токены
- Как ставить куки ?
- Процесс логина
- Процесс рефреш токенов
- Кража токенов/Механизм контроля токенов
| <?php | |
| // -- types are a compile-time propagated concept | |
| // https://psalm.dev/r/338f74a96c | |
| class TheType | |
| { | |
| /** @var string */ | |
| public $foo = 'bar'; | |
| } |
| <?php | |
| declare(strict_types=1); | |
| namespace App\Doctrine\EventListener; | |
| use Doctrine\DBAL\Schema\PostgreSQLSchemaManager; | |
| use Doctrine\ORM\Tools\Event\GenerateSchemaEventArgs; | |
| final class FixPostgreSQLDefaultSchemaListener |
| <?php | |
| namespace Axelvkn\AppBundle\Filter; | |
| use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\SearchFilter; | |
| use ApiPlatform\Core\Bridge\Doctrine\Orm\Util\QueryNameGeneratorInterface; | |
| use ApiPlatform\Core\Exception\InvalidArgumentException; | |
| use Doctrine\ORM\QueryBuilder; | |
| class OrSearchFilter extends SearchFilter |
| <?php | |
| namespace App\Request\ParamConverter; | |
| use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter; | |
| use Sensio\Bundle\FrameworkExtraBundle\Request\ParamConverter\ParamConverterInterface; | |
| use Symfony\Component\HttpFoundation\Request; | |
| use Symfony\Component\Validator\ConstraintViolationListInterface; | |
| final class ConstraintViolationsConverter implements ParamConverterInterface |
| { | |
| "scripts": { | |
| "test": "phpunit", | |
| "test-coverage": "phpunit --coverage-clover build/logs/clover.xml", | |
| "show-coverage": "phpunit --coverage-text=php://stdout", | |
| "report-coverage": "phpunit --coverage-html build/logs/report", | |
| "diff-files": "f() { git diff --name-only --diff-filter=ACMRTUXB $1 | grep -ivE composer\\.\\|\\.git ; }; f", | |
| "cs": "f() { if test \"$1\"; then php-cs-fixer fix --dry-run --config=.php_cs -v --using-cache=no --diff --diff-format=udiff --ansi $1 ; else echo \"Nothing to fix\" ; fi ; }; f", | |
| "cs-fix": "f() { if test \"$1\"; then php-cs-fixer fix --config=.php_cs -v --using-cache=no --diff --diff-format=udiff --ansi $1 ; else echo \"Nothing to fix\" ; fi ; }; f", |
| <?php | |
| /************************************************************************* | |
| * Get File Information | |
| */ | |
| // Assuming these come from some data source in your app | |
| $s3FileKey = 's3/key/path/to/file.ext'; | |
| $fileName = 'file.ext'; |
Here is the list of talks that I found most useful to me.
| <?php | |
| namespace App; | |
| use Illuminate\Auth\Passwords\PasswordBroker as IlluminatePasswordBroker; | |
| class PasswordBroker extends IlluminatePasswordBroker | |
| { | |
| /** | |
| * Send the password reset link via e-mail in a queue |
Одна из лучших вещей в написании кода - очевидность хороших практик, ведь если им не следовать, возникает раздражение. Очень надоедает, когда вам нужно писать одну и ту же вещь снова и снова. Когда вы чувствуете себя недовольным из-за повторения одних и тех же вещей, наступает время абстракции.
В типичном приложении вы, вероятно, имеете множество Репозиториев для работы с вашей системой хранения. Когда вы используете Laravel, вы проводите много времени работая с Eloquent. Тем не менее, поверьте мне, когда у вас есть множество Репозиториев, вам быстро надоедает многократно писать одни и те же методы для доступа к данным.
В этом руководстве я хочу рассмотреть некоторые паттерны для абстракции основных методов, которые вы больше не будете повторять в каждой реализации ваших Репозиториев. Я также покажу, как мы можем использовать гибкость Eloquent и его Query Builder для написания действител