Posts

Symfony - Twig - How to check on instanceof class object

In Twig exist "constant" function that returns constant value, but if you set "class" in first parameter and object in second parameter, then function returns the fully qualified class name of an object.  So we can use it in our case and compare it on class name that we want to check like "instanceof". Example: {% if constant('class', app.user) == 'User' %}{% endif %} Or with namespace: {% if constant('class', app.user) == 'EntityBundle\\Entity\\User' %}{% endif %}

Which PHP Framework to choose in 2024

 If you've decided to start learning a PHP framework this year, or from scratch, and can't decide which one to choose, here's a selection of the most popular: Laravel - 302,403,373 downloads Symfony - 78,291,128 downloads Cakephp - 12,444,302 downloads Codeigniter4 - 1,720,925 downloads Codeigniter - 1,617,412 downloads by downloads in January 2024 All info from Packagist.org So, to choose Laravel in this year, you obtain much more possibilities to find a job. 

How to add screenshot to App Store for your App

Warning! Use no transparency! Size resolutions: 6.7” Display > 1290 x 2796 pixels 6.5” Display > 1242 x 2688 pixels || 1284 x 2778 pixels 6.1” Display > 1179 x 2556 pixels 5.5” Display > 1242 x 2208 pixels 12.9" Display (2nd + 3rd gen) > 2048 x 2732 pixels Mac > 2880 x 1800 pixels Apple Watch > 396 x 484 pixels ----------------------------------------- 72 dpi, RGB, flattened High-quality JPEG or PNG image file format

HTML - How to add placeholder to dropdown (select) with selectpicker

First time in my life I needed to add placeholder for dropdown O.o I even didn`t know that it exists. But, anyway, I need to implement this case. I selected selectpicker from bootstrap to have ability to use live searching in dropdown. HTML for adding dropdown: <select class="dropdown" data-live-search="true">     <option class="hide" value="" disabled selected hidden>Placeholder</option>     <option value="option1">Option 1</option> </select>  Javascript: const select = $('select').selectpicker(); $('.dropdown').on('click', function () { $('.dropdown').find('.hide').hide(); });

List of Queue Managers (Queue Services, Streaming Systems, MQTT)

Image
Apache Kafka A distributed streaming platform designed for high-throughput, fault-tolerant, and scalable data streaming. It uses a publish-subscribe model and is widely used for real-time data processing. ActiveMQ An open-source message broker that supports Java Message Service (JMS) and provides features like message persistence, clustering, and diverse communication patterns. ZeroMQ A lightweight messaging library that allows for asynchronous message passing between applications. It provides various messaging patterns and is known for its simplicity and high performance. Apache Pulsar A distributed messaging and event streaming platform that enables scalable and durable messaging with multi-tenancy support. It is designed for high-throughput and low-latency use cases. NATS (NATS.io) A lightweight and high-performance messaging system for cloud-native applications. NATS supports publish-subscribe and point-to-point communication patterns and is known for simplici...

Symfony - Doctrine - How to save SQL query to Session

If you have separated ajax table sheet with data and filters, sometimes, you need to keep this filtered data between requests. In my case, I needed to be able to download file in CSV format, after choosing all necessary filters in table. So, it is possible to store SQL query in client Session after applying all filters and receive data from DB via DQL. To store DQL in session: $query = $this->createQueryBuilder('i')->select('COUNT(i)'); $_SESSION['query'] = $query->getQuery()->getDQL(); $_SESSION['query_params'] = $query->getQuery()->getParameters(); To get data from DB: $data = $this->createQuery($_SESSION['query'])->setParameters($_SESSION['query_params'])->getResult();

jQuery UI - Dialog - How to hide autofocus

The simplest way, just add hidden input with autofocus attribute . < input type ="hidden" autofocus > As it said in jQuery UI documentation, it will find this input firstly by priority and move focus on this input. But as this input hidden user does not see this. Choosing priority: The first element with the autofocus attribute The first :tabbable element within the dialog's content The first :tabbable element within the dialog's buttonpane The dialog's close button The dialog itself

Symfony - Doctrine - How to set one-to-one relation with field not exist in target table, but exist in another one

Today, I faced with a bug: Custom Field entity has a RelId column relates to two different entities: Product and Bundle. Set RelId into Custom Field directly connected to Product, but not exist in Bundle table. After Entity Manager flush(), I got an error: RelId can not be null. How come that RelId field became null, when flushing. After debugging, I realized, Doctrine checks if exist this connected RelId field in Bundle table. If not, Doctrine just set RelId to null and go on. So, we need not to set RelId directly, but using entity, like Product or Bundle, in my case. Here's a simplified example using annotations: Let's assume you have three entities: SourceEntity, TargetEntity, and RelationEntity. RelationEntity will act as the join table, holding the relationship between SourceEntity and TargetEntity. // SourceEntity.php use Doctrine\ORM\Mapping as ORM; /** * @ORM\Entity */ class SourceEntity { // ... other properties /** * @ORM\OneTo...

Git - How to revert, cancel last changes on remote server

Sometimes you do something wrong. For example, push to master branch dev commits or something else, what does not have to find itself here.  There are present a lot of official recommends how to push revert commits... but honestly, in my case, it does not work in proper way, as you want. So, I found ferroconcrete method how to solve this issue. But it seems to somebody not gracefully, but it works at least. First step: Revert to required commit.  git reset --hard <commit-hash> (This command will reset the branch to the specified commit. Be cautious when using --hard as it will discard changes in your working directory and staging area.) Second step: Create new branch from this point.  git checkout -b <new-branch-name> (This command creates a new branch and switches to it. Replace <new-branch-name> with the desired name for your new branch.) Third step: Remove your damaged branch on server. git push origin --delete <branch-name> (Replace <br...

Symfony - Doctrine - How to change old attributes in entity to new PHP 8 attributes

Old-Style Annotations: Written as comments, typically using PHPDoc syntax (/** ... */). Annotations are interpreted by external tools or libraries. Doctrine ORM interprets annotations to configure database mappings. Limited flexibility in terms of syntax and available metadata types. May lack type safety and validation. PHP 8 Attributes: Written using the #[...] syntax. Introduced as a language feature in PHP 8 for adding metadata directly to code. Provides a more structured and standardized way of associating metadata with classes, methods, or properties. Attributes are a built-in language feature, eliminating the need for external interpretation in many cases. Attributes are directly handled by the PHP runtime. Offers better type safety and validation compared to traditional annotations. Supports the use of PHP's native types and expressions within attribute values. Attributes support namespacing, allowing for better organization and...

JavaScript - How to create select options from array

Define an array with the values you want to populate in the <select> element. var fruits = ["Apple", "Banana", "Orange", "Grapes", "Mango"]; Create a <select> element in your HTML markup. <select id="mySelect"></select> Iterate through the array and create <option> elements for each value, then append them to the <select> element. Here's an example: document.addEventListener("DOMContentLoaded", function () { var fruits = ["Apple", "Banana", "Orange", "Grapes", "Mango"]; var selectElement = document.getElementById("mySelect"); for (var i = 0; i < fruits.length; i++) { var option = document.createElement("option"); option.value = fruits[i]; option.text = fruits[i]; selectElement.appendChild(option); } }); In this example, the JavaScript code runs ...

Symfony - Doctrine - How to add subquery into where clause

If you want to add subquery into where clause, you need to create subquery firstly: $sub = $this->_em->createQueryBuilder()             ->select('cf.id')             ->from(CustomField::class, 'cf')             ->where('cf.type = :type AND cf.fieldName = :fieldName'); After that you can use this subquery as DQL: $this->_em->createQueryBuilder()->expr()->in('cfv.fieldId', $sub->getDQL()) In that case we use it as IN condition. But it is just example. And finally it will look like that: $this->createQueryBuilder('cfv')             ->update(CustomFieldValue::class, 'cfv')             ->set('cfv.value', ':value')             ->where($this->_em->createQueryBuilder()->expr()->in('cfv.fieldId', $sub->getDQL()))           ...

WordPress - How to create simple plugin with shortcode

Creating a simple WordPress plugin involves a few steps. Below is an example of a minimalistic WordPress plugin that adds a custom shortcode to display a greeting message. Step 1: Set Up Plugin Structure Create a new folder for your plugin in the "wp-content/plugins" directory. Let's call it "simple-greeting-plugin". Step 2: Create the Main Plugin File Inside your plugin folder (simple-greeting-plugin), create a main PHP file, e.g., "simple-greeting-plugin.php". Step 3: Add Plugin Information In your main PHP file, add the plugin information in the comment header. <?php /* Plugin Name: Simple Greeting Plugin Description: A simple WordPress plugin that adds a greeting shortcode. Version: 1.0 Author: Your Name */ Step 4: Add Greeting Shortcode Functionality Now, let's add the functionality to display a greeting message using a shortcode. Update your "simple-greeting-plugin.php" file as follows: <?php /* Plugin Name:...

Symfony - How to fix Circular Reference

 A circular reference in Symfony typically occurs when there's a loop in the dependency injection graph. It means that one service depends on another service, which in turn depends on the first one, creating an infinite loop. Check Your Service Definitions: Review your service definitions in the services.yaml or other configuration files. Look for any circular dependencies. A circular reference often occurs when Service A depends on Service B, and Service B depends on Service A. Use Setter Injection: Instead of injecting dependencies through the constructor, use setter injection. In Symfony, you can use setter injection by creating setter methods in your services and injecting dependencies through these methods after the service is instantiated. Lazy Loading: Consider using lazy loading for dependencies. Symfony allows lazy loading of services, which means that the actual instantiation of a service is delayed until it's actually used. You can enable lazy loading for a service b...

PHP - How to show expected return array elements

When your function or method returns an associative array, it's beneficial to document the expected structure of that array using PHPDoc type annotations. This practice not only serves as documentation for developers using your code but also enables features like auto-completion in integrated development environments (IDEs). For example: /** * Creates a user. * * @return array{"name": string, "age": int, "married": bool} */ function createUser(): array { return ['name' => 'Nayf', 'age' => 38, 'married' => true]; } In this PHPDoc block, the @return annotation is used to specify that the function returns an associative array with three elements: "name" of type string, "age" of type int, and "married" of type bool. This information provides clarity on the expected structure of the returned array. The PHPDoc type system supports various basic PHP types such as string, bool, in...

Symfony - How to generate URL without controller or path

If you need to generate URL out of controller, you need to create you own Route with necessary path. $route = new \Symfony\Component\Routing\Route('/calculator/new'); And add this route to Route Collection: $routes = new \Symfony\Component\Routing\RouteCollection(); $routes->add('calculator_new', $route); After that you can generate URL: $generator = new \Symfony\Component\Routing\Generator\UrlGenerator($routes, new \Symfony\Component\Routing\RequestContext()); $url = $generator->generate('calculator_new'); This returns: "/calculator/new" If you need to add any query parameters: $url = $generator->generate('calculator_new', ['width' => 100]); This will return "/calculator/new?width=100" as the generated URL, including the specified query parameter. In summary, by creating a route, adding it to a collection, and using a URL generator, you can easily generate URLs and include additional query parameters...

Javascript - How to build URL with query parameters

If we just need to add GET parameters to current URL: Firstly, let`s create URL object with current link. const url = new URL(window.location.protocol+window.location.host+window.location.pathname); Where: window.location.protocol - https or http; window.location.host - current host; window.location.pathname - current url after host and before query parameter; After that, let`s add necessary query parameters: url.searchParams.set('id', 123); And get URL what we wanted: url.toString(); For example, let`s redirect to new URL: window.location.href = url.toString();

PHP - How to explode empty string with empty array

When you try to explode empty string, you get not empty array, as we would have assumption, but array with one element with blank string. PHP says it is not a bug. So, we need to find a way how to avoid this behavior. As we don`t want to have any element in array after exploding empty string. We want to have empty array as well, obviously. We can use "array_filter" function to remove empty element in array. Example: $correctArray = array_filter(explode(';', ''));

Chrome - This page is not secure (broken HTTPS) How to fix certificate

Today I faced with problem of expired ssl certificate for website. But even after updating (renew) certificate, browser continue to show error "This page is not secure (broken HTTPS)". But at the same time, it shows me that certificate is valid. What didn`t I do: clean cache and cookies where I could find it explored all the settings googled everywhere and nothing helped me. When my patience is over, I just try to open this link in new tab , and it works. Madness.

MySQL - How to copy full Database fast

I know one dirty life-hack, how to copy full data from database with all configs and users. Just copy all files from old base to new one . For example (for Linux): cp -r /var/lib/mysql /new_destination It will transfer not only data from database, but and users with their own passwords and privileges. NOTE: It works only if you database placed on one host (server). I must emphasize that using the method described above to copy a database, including configurations and users, can have serious consequences and is not recommended for various reasons. Firstly, it may violate privacy and security regulations, potentially exposing sensitive information. Secondly, this approach might lead to compatibility issues and corruption of data in the new destination. Moreover, it could compromise the integrity of the database and jeopardize the overall system's stability. It's crucial to follow proper procedures when migrating or copying databases to ensure data security, integrity, and ...