Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions public/llms.txt
Original file line number Diff line number Diff line change
Expand Up @@ -174,3 +174,9 @@ Content spans foundational PHP/middleware architecture (PSR-7, PSR-15, request l
*open-source license comparisons*

- [MIT versus LGPL in practice: Dotkernel case](https://www.dotkernel.com/licensing/mit-versus-lgpl-in-practice-dotkernel-case/): How Dotkernel handled discovering an LGPL v3 dependency in one of its MIT-licensed packages.

## Design Patterns (1 post)

*naming conventions for PSR-15 handlers*

- [Naming pattern for PSR-15 handlers in Dotkernel applications](https://www.dotkernel.com/design-pattern/naming-pattern-for-psr-15-handlers-in-dotkernel-applications/): The PSR-15 handler naming pattern adopted in Dotkernel Admin v6, and planned for Frontend and Light, meant to stay clear as a project's size and number of contributors grow.
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@ A: Before fetching it, echo the query to visualize it: echo $select->__toString(

## Resources

- [Zend_Db](http://framework.zend.com/manual/en/zend.db.adapter.html)
- [Zend_Db](https://docs.laminas.dev/laminas-db/adapter/)
- [What are returning the FETCH functions from Zend_Db](http://www.dotkernel.com/best-practice/sql-fetch-zend-db/)
- [Subqueries with Zend_Db](http://www.dotkernel.com/best-practice/subqueris-with-zend-db/)
- [INSERT, UPDATE, DELETE statements with Zend_Db](http://www.dotkernel.com/best-practice/iud-statements-with-zend-d/)
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ DEFAULT and ON UPDATE clauses can be used together or separately, depending on y
- With a constant `DEFAULT` value, the column has the given default and is not automatically initialized to the current timestamp.
If the column also has an `ON UPDATE CURRENT_TIMESTAMP` clause, it is automatically updated; otherwise, it has a constant default and is not automatically updated.

For more details, check out the MySQL Manual.
For more details, check out the [MySQL Manual](https://dev.mysql.com/doc/refman/8.0/en/timestamp.html).

Note: only one timestamp field can be `DEFAULT CURRENT_TIMESTAMP` in a table.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -109,4 +109,3 @@ A: The article states it works for any Dotkernel 1.x version, as long as the ser
## Resources

- [Composer install / PHP dependency manager tutorial](https://www.codementor.io/php/tutorial/composer-install-php-dependency-manager)
- [Using Dotkernel with Composer dependencies](http://www.dotkernel.com/dotkernel/using-dotkernel-…ser-dependencies/)
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ npm run prod
```shell
vendor/bin/phinx create --configuration=config/migrations.php RememberUserSchema
```
3. Modify the generated migration file as in [user_remember_schema](https://github.com/dotkernel/frontend/blob/3.0/data/database/migrations/20220621062142_remember_user_schema.php), then run it against the database:
3. Modify the generated migration file as in [user_remember_schema](https://www.dotkernel.com/dotkernel/autologin-cookie-remember-me-feature/), then run it against the database:
```shell
vendor/bin/phinx migrate --configuration=config/migrations.php
```
Expand Down Expand Up @@ -131,7 +131,7 @@ A: Add the CSS to src/App/assets/scss/components/_profile.scss, then run npm run

- [Dotkernel Frontend on GitHub](https://github.com/dotkernel/frontend)
- [UserRememberMe entity example](https://github.com/dotkernel/frontend/blob/3.0/src/User/src/Entity/UserRememberMe.php)
- [Remember user schema migration example](https://github.com/dotkernel/frontend/blob/3.0/data/database/migrations/20220621062142_remember_user_schema.php)
- [Remember user schema migration example](https://www.dotkernel.com/dotkernel/autologin-cookie-remember-me-feature/)
- [RememberMeMiddleware example](https://github.com/dotkernel/frontend/blob/3.0/src/App/src/Middleware/RememberMeMiddleware.php)
- [pipeline.php example](https://github.com/dotkernel/frontend/blob/3.0/config/pipeline.php)
- [UserService example](https://github.com/dotkernel/frontend/blob/3.0/src/User/src/Service/UserService.php)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ class Admin extends AbstractEntity implements AdminInterface
}
```

For further details about the cache mode please refer to the [official documentation](https://www.doctrine-project.org/projects/doctrine-orm/en/3.0/reference/second-level-cache.html).
For further details about the cache mode please refer to the [official documentation](https://www.doctrine-project.org/projects/doctrine-orm/en/latest/reference/second-level-cache.html).
When querying data, you can have Doctrine cache your results.
You do this by calling the `setCacheable` method on the query builder.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,5 +65,4 @@ A: Using the PEAR installer: remove the installed package with `pear uninstall z

## Resources

- [PEAR channel for Zend Framework 1](http://pear.dotkernel.com/)
- [@dotkernel on Twitter](https://twitter.com/dotkernel)
3 changes: 1 addition & 2 deletions public/md-articles/dotkernel/templating-in-dotkernel3.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,9 +43,8 @@ A: The previous templating engine, although solid and robust, was also 10 years
A: Templates can now be written as HTML code with extra Twig tags, and Twig includes features such as layouts, loops, variables, and escaping, giving the familiarity of HTML with the overview and convenience of PHP.

**Q: Where can I read the official Twig templating documentation for Dotkernel?**
A: The official documentation is linked in the article at docs.dotkernel.com/Prerequisites/Templates.
A: The official documentation is available at [twig.symfony.com](https://twig.symfony.com/).

## Resources

- [Twig Templating Engine](https://twig.symfony.com/)
- [Dotkernel Templates documentation](https://docs.dotkernel.com/Prerequisites/Templates)
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,3 @@ A: Release notes were added for Dotkernel3 frontend and admin, a Webpack tutoria
**Q: Who was credited as a contributor in this report?**
A: JapSeyz was thanked as a contributor.

## Resources

- [Release Notes](https://docs.dotkernel.com/Overview/Release-Notes.html)
- [Webpack tutorial](https://docs.dotkernel.com/Prerequisites/Webpack.html)
- [Api Endpoint Documentation Guidelines](https://docs.dotkernel.com/Guidelines/Documentation-Guidelines/Api-Endpoint.html)
4 changes: 2 additions & 2 deletions public/md-articles/dotkernel3/dotkernel-admin-v4.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ There should be an admin account with the following credentials:
- Username: admin
- Password: dotadmin

Head over to [https://admin4.dotkernel.net/](https://admin4.dotkernel.net/) and see for yourself.
Head over to [https://admin7.dotkernel.net/](https://admin7.dotkernel.net/) and see for yourself.

## Dotkernel Admin V4 Features

Expand Down Expand Up @@ -226,7 +226,7 @@ Note: you'll find in the `#tableToolbar` buttons that toggle a modal for adding/
A: Dotkernel Admin V4 was officially released on 19 July 2022. It's Dotkernel's PSR-7 Admin, an application based on Mezzio, mainly for managing and displaying tabular data from one or more database components.

**Q: What are the demo credentials for trying out Dotkernel Admin V4?**
A: Username admin and password dotadmin, on the demo at https://admin4.dotkernel.net/.
A: Username admin and password dotadmin, on the demo at https://admin7.dotkernel.net/.

**Q: What PHP version does Dotkernel Admin V4 support?**
A: Full support for PHP 8.1, with a minimum requirement of PHP 7.4.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,15 +13,15 @@ language: "en"
## TL;DR

Dotkernel Admin version 3 has launched as a basic admin panel built on Bootstrap ^4.5.0 and Doctrine, performing CRUD operations over a database on top of the Mezzio microframework and Laminas components.
The source is available on GitHub, with a live demo running at admin.dotkernel.net.
The source is available on GitHub, with a live demo running at admin7.dotkernel.net.
Branch 3.0 is now the default branch, requiring Mezzio ^3.2, PHP ^7.4, Doctrine 2.7.x, Twig 3.x, and Bootstrap 4.5, with dot-* packages limited to version 3.x and above.

## Dotkernel Admin PHP Application Version 3 Was Launched

Dotkernel is a collection of PSR-7 Middleware applications built on top of the [Mezzio microframework and using Laminas components](https://getlaminas.org/).
Dotkernel Admin is a basic admin panel, based on Bootstrap ^4.5.0, using Doctrine and performing basic CRUD operations over a database.
You can clone it from [GitHub](https://github.com/dotkernel/admin).
Live demo: [admin.dotkernel.net](https://admin.dotkernel.net)
Live demo: [admin7.dotkernel.net](https://admin7.dotkernel.net)

### Changelog

Expand All @@ -40,7 +40,7 @@ Branch 3.0 is the current and default branch, and:
A: A basic admin panel based on Bootstrap ^4.5.0, using Doctrine to perform basic CRUD operations over a database, built as a collection of PSR-7 Middleware applications on top of Mezzio and Laminas components.

**Q: Where can you see a live demo of version 3?**
A: At admin.dotkernel.net.
A: At admin7.dotkernel.net.

**Q: What are the core requirements listed in the version 3 changelog?**
A: Mezzio ^3.2, PHP ^7.4, Doctrine 2.7.x, and Twig 3.x, plus Bootstrap 4.5, with dot-* packages limited to version 3.x and above.
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ Note: a 2024 follow-up article covers the same topic using Symfony Cache instead

Using an ORM in production without any sort of cache strategy is a very bad move.
The database server chokes; lots of CPU cycles wasted only to generate metadata and queries over and over again at each request; the system slows down and so on.
Following [Doctrine documentation](https://www.doctrine-project.org/projects/doctrine-orm/en/2.7/reference/caching.html#integrating-with-the-orm), we choose to configure the Doctrine cache system through psr/container.
Following [Doctrine documentation](https://www.doctrine-project.org/projects/doctrine-orm/en/latest/reference/caching.html#integrating-with-the-orm), we choose to configure the Doctrine cache system through psr/container.
The main parts we are going to use are `query_cache`, `metadata_cache` and `result_cache`.
As cache type we choose `PhpFileCache` and for result cache we are setting a lifetime of 3600 seconds.

Expand Down Expand Up @@ -181,5 +181,5 @@ A: Enable result and/or query cache on the query builder's query before passing

## Resources

- [Doctrine Advanced Configuration](https://www.doctrine-project.org/projects/doctrine-orm/en/2.7/reference/advanced-configuration.html)
- [Doctrine Caching Documentation](https://www.doctrine-project.org/projects/doctrine-orm/en/2.7/reference/caching.html)
- [Doctrine Advanced Configuration](https://www.doctrine-project.org/projects/doctrine-orm/en/latest/reference/advanced-configuration.html)
- [Doctrine Caching Documentation](https://www.doctrine-project.org/projects/doctrine-orm/en/latest/reference/caching.html)
Original file line number Diff line number Diff line change
Expand Up @@ -150,7 +150,7 @@ Replace the following lines to reflect the changes:
You can check the complete guides and example files from the following links:

- [Migration guide for Dotkernel Frontend](https://github.com/dotkernel/frontend/tree/master/docs)
- [Migration guide for Dotkernel Admin](https://github.com/dotkernel/admin/tree/master/docs)
- [Migration guide for Dotkernel Admin](https://docs.dotkernel.org/admin-documentation/) (the old `github.com/dotkernel/admin/tree/master/docs` folder has since moved to this documentation site)

## FAQ

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -200,7 +200,7 @@ $body->rewind(); // or $body->seek(0);
$bodyText = $body->getContends();
```

More information can be found in the [PSR-7 article](https://docs.dotkernel.com/Prerequisites/PSR-7.html) in [Dotkernel3 documentation portal](https://docs.dotkernel.com/).
More information can be found in the [PSR-7 article](https://www.php-fig.org/psr/psr-7/) in Dotkernel3 documentation portal.

Sources: [PSR-7: HTTP messages](http://www.php-fig.org/psr/psr-7/), [zend-diactoros](https://zendframework.github.io/zend-diactoros/)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -145,4 +145,3 @@ A: Not necessarily - in Dotkernel Light most static-page actions were combined i
- [Dotkernel Light](https://github.com/dotkernel/light)
- [PR for replacing controllers with handlers](https://github.com/dotkernel/light/pull/33)
- [Mezzio features](https://docs.mezzio.dev/mezzio/v3/getting-started/features/)
- [Single Action Handlers in PHP Frameworks](https://dev.to/ilyasdeckers/single-action-handlers-in-php-frameworks-3jai)
Original file line number Diff line number Diff line change
Expand Up @@ -17,16 +17,16 @@ This article runs through the steps of installing a Mezzio application (Dotkerne
## Steps

1. Make sure WSL2 is installed on your machine, following the [WSL2 installation guide](https://github.com/dotkernel/development/blob/main/wsl/README.md).
2. Install Ubuntu 20.04 LTS inside WSL2, as described in the [Ubuntu 20 setup guide](https://github.com/dotkernel/development/blob/main/wsl/os/ubuntu20/README.md).
3. Create a virtual host for your project using the [virtual hosts guide](https://github.com/dotkernel/development/blob/main/wsl/os/ubuntu20/README.md#create-virtual-hosts).
2. Install Ubuntu 20.04 LTS inside WSL2, as described in the [Ubuntu 20 setup guide](https://docs.dotkernel.org/development/v2/running/) (the current version of this guide covers AlmaLinux 9, the distro the WSL setup has since moved to).
3. Create a virtual host for your project using the [virtual hosts guide](https://docs.dotkernel.org/development/v2/virtualhosts/create-virtualhost/).
4. Using your terminal, move into the virtual host directory you just created:

```shell
cd /home/your-username/projects/your-virtualhost
```

Install Dotkernel API by following the [Dotkernel API guide](https://github.com/dotkernel/api).
Make sure the `data` and `log` directories are writable by changing their permissions, as described in the [common permission issues guide](https://github.com/dotkernel/development/blob/main/wsl/HELP.md#fix-common-permission-issues).
Make sure the `data` and `log` directories are writable by changing their permissions, as described in the [common permission issues guide](https://docs.dotkernel.org/development/v2/faq/#how-do-i-fix-common-permission-issues).
5. Set up PHPStorm to work with WSL2 files, as described in the [JetBrains WSL development environment article](https://www.jetbrains.com/help/phpstorm/how-to-use-wsl-development-environment-in-product.html).

## Note
Expand Down Expand Up @@ -57,8 +57,8 @@ A: There is a guide for AlmaLinux 8 as well, but it is not fully functional beca
## Resources

- [WSL2 installation guide](https://github.com/dotkernel/development/blob/main/wsl/README.md)
- [Ubuntu 20 setup inside WSL2](https://github.com/dotkernel/development/blob/main/wsl/os/ubuntu20/README.md)
- [Create virtual hosts guide](https://github.com/dotkernel/development/blob/main/wsl/os/ubuntu20/README.md#create-virtual-hosts)
- [Ubuntu 20 setup inside WSL2](https://docs.dotkernel.org/development/v2/running/)
- [Create virtual hosts guide](https://docs.dotkernel.org/development/v2/virtualhosts/create-virtualhost/)
- [Dotkernel API installation guide](https://github.com/dotkernel/api)
- [Fix common permission issues](https://github.com/dotkernel/development/blob/main/wsl/HELP.md#fix-common-permission-issues)
- [Fix common permission issues](https://docs.dotkernel.org/development/v2/faq/#how-do-i-fix-common-permission-issues)
- [Using WSL development environment in PHPStorm](https://www.jetbrains.com/help/phpstorm/how-to-use-wsl-development-environment-in-product.html)
Original file line number Diff line number Diff line change
Expand Up @@ -65,4 +65,4 @@ A short tip mentioned is to use type casting to avoid SQL Injection in a WHERE c

- [Protection against SQL Injection using PDO and Zend Framework (part 1)](http://www.dotkernel.com/php-development/protection-against-sql-injection-using-pdo-and-zend-framework/)
- [Secure Programming with the Zend Framework (Stefan Esser slides)](http://www.suspekt.org/downloads/DPC_Secure_Programming_With_The_Zend_Framework.pdf)
- [Type casting in PHP - what's the point?](http://www.dustinweber.com/main-page/type-casting-in-php-whats-the-point/)
- [PHP Type Casting](https://www.w3schools.com/php/php_casting.asp)
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,4 @@ To avoid this, you should use the correct prepared statements from Zend Framewor
A: Zend_Db has two escaping methods that can be used: quote() and quoteIdentifier().
Both of these methods handle strings by putting them between single quotes.

## Resources

- [SQL Injection Protection in PHP With PDO (ezinearticles.com)](http://ezinearticles.com/?SQL-Injection-Protection-in-PHP-With-PDO&id=1815110)
- [Zend Webinar: Secure Application Development with the ZF](http://www.zend.com/webinar/Framework/70170000000bEs9-webinar-secure-application-development-with-the-ZF-20100505.flv)
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ This article explains what Intl is used for, why it might be missing depending o

PHP packages, frameworks, libraries, and scripts might require different PHP extensions.
In this case, the Intl extension is needed to work with Internationalization Functions.
See [What is Internationalization?](https://www.gala-global.org/language-industry/intro-language-industry/what-internationalization) for background.
See [What is Internationalization?](https://www.w3.org/International/questions/qa-i18n) for background.
Have you seen any of these error messages?

- Zend InputFilter requires intl PHP extension
Expand All @@ -32,7 +32,7 @@ Parts of this tutorial can also serve as a guide for installing or enabling othe

> Internationalization extension (further referred to as Intl) is a wrapper for the ICU library, enabling PHP programmers to perform various locale-aware operations including but not limited to formatting, transliteration, encoding conversion, and calendar operations.

Source: [PHP Documentation](http://php.net/manual/en/intro.intl.php)
Source: [PHP Documentation](https://www.php.net/manual/en/book.intl.php)

> This extension may be installed using the bundled version as of PHP 5.3.0, or as a PECL extension as of PHP 5.2.0. In other words, there are two methods to install the intl extension.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ Dotkernel is sunsetting its unofficial PEAR channel for Zend Framework 1, which
The main reasons are that upgrading PEAR to work with PHP 8 is too painful, and the channel currently runs on an LXC container with CentOS 7, which doesn't work on the latest Proxmox version, making the upgrade to AlmaLinux not worth the effort.
The post closes by thanking PEAR for its historical contribution to the PHP ecosystem.

The unofficial [PEAR channel for Zend Framework 1](http://pear.dotkernel.com/) was created in [2016](https://www.dotkernel.com/dotkernel/migration-of-zend-framework-1-pear-channel/), at the time when [PEAR](https://pear.php.net/) was still used a lot.
The unofficial PEAR channel for Zend Framework 1 was created in [2016](https://www.dotkernel.com/dotkernel/migration-of-zend-framework-1-pear-channel/), at the time when [PEAR](https://pear.php.net/) was still used a lot.

Due to the fact that it is a pain to upgrade PEAR to work with PHP 8, we must sunset the channel.

Expand Down
2 changes: 1 addition & 1 deletion public/md-pages/frontend.md
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ Frontend implements the second option, because deleting a user row is rarely wha
The skeleton stores only what it needs to run those flows: first name, last name and the email address used as the identity, for password reset and account activation.
Anonymizing replaces exactly those.

- [Anonymization reference](https://docs.dotkernel.org/frontend/v5/reference/account-anonymization/)
- [Anonymization reference](https://docs.dotkernel.org/frontend-documentation/v5/reference/account-anonymization/)

### What anonymization changes

Expand Down
Loading