PHP Reddit – Telegram
PHP Reddit
33 subscribers
293 photos
37 videos
24.9K links
Channel to sync with /r/PHP /r/Laravel /r/Symfony. Powered by awesome @r_channels and @reddit2telegram
Download Telegram
Help with EventListener

I want users to be redirect to 'app_test' when they try to visit an authentication page (eg. app_login and app_register) while already authenticated.
I also want the opposite. When unauthenticated users try to visit a page that requires them to be authenticated, they should be redirected to 'app_login'.

I think an EventListener would be the best choice, but the html appears a second time in the debug toolbar. (See image)

This also only happens when i do a hard refresh.

Does anyone know whats going on, and how to fix it?

If you need more info from my project, please let me know!

TIA!

My listener:

<?php

namespace App\EventListener;

use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\Routing\RouterInterface;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use Symfony\Component\EventDispatcher\Attribute\AsEventListener;

#AsEventListener
class AuthRedirectListener
{
    public function construct(
        private TokenStorageInterface $tokenStorage,
        private RouterInterface $router
    ) {
    }

    public function invoke(RequestEvent $event): void
    {
        if (!$event->isMainRequest()) {
            return;
        }

        $request = $event->getRequest();
        $currentRoute = $request->attributes->get('route');
        $isLoggedIn = $this->tokenStorage->getToken()?->getUser() !== null;

        // Redirect logged-in users from auth routes to app
test
        if (inarray($currentRoute, ['applogin', 'appregister']) && $isLoggedIn) {
            $event->setResponse(new RedirectResponse($this->router->generate('app
test')));
            return;
        }

        // Redirect unauthenticated users from non-auth routes to applogin
        if (!in
array($currentRoute, 'app_login', 'app_register') && !$isLoggedIn) {
            $event->setResponse(new RedirectResponse($this->router->generate('applogin')));
            return;
        }
    }
}
<?php


namespace App\EventListener;


use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\Routing\RouterInterface;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use Symfony\Component\EventDispatcher\Attribute\AsEventListener;


#[AsEventListener]
class AuthRedirectListener
{
    public function construct(
        private TokenStorageInterface $tokenStorage,
        private RouterInterface $router
    ) {
    }


    public function invoke(RequestEvent $event): void
    {
        if (!$event->isMainRequest()) {
            return;
        }


        $request = $event->getRequest();
        $currentRoute = $request->attributes->get('
route');
        $isLoggedIn = $this->tokenStorage->getToken()?->getUser() !== null;


        // Redirect logged-in users from auth routes to apptest
        if (in
array($currentRoute, 'app_login', 'app_register') && $isLoggedIn) {
            $event->setResponse(new RedirectResponse($this->router->generate('apptest')));
            return;
        }


        // Redirect unauthenticated users from non-auth routes to app
login
        if (!inarray($currentRoute, ['applogin', 'appregister']) && !$isLoggedIn) {
            $event->setResponse(new RedirectResponse($this->router->generate('app
login')));
            return;
        }
    }
}

The result:

https://preview.redd.it/2e7vujn946ke1.png?width=1912&format=png&auto=webp&s=e0ac0043e7731ca5b582682d4098f6773e9f6721

https://redd.it/1ithwmd
@r_php
Just wanted to share my new open-source Laravel app...

Hey everyone,

I've been a fan of Laravel for many years, I was the original developer of Invoice Ninja way back in 2013. I've spent the past few years working with Flutter (side note: the first thing I did after learning Flutter was build a website for it using Laravel), but I've recently started working on a new Laravel project I thought may be worth sharing here.

It's called Event Schedule, it's an all-in-one platform to create calendars, sell tickets, manage teams, and streamline event check-ins with QR codes.

\- Hosted version: https://www.eventschedule.com

\- Self-hosted version: https://github.com/eventschedule/eventschedule

It has a direct integration with Invoice Ninja which enables using the many supported payment gateways to accept online payments. It's released under the AAL license and is free to use commercially.

Cheers!



https://redd.it/1itszkd
@r_php
Symfony Security: Access Token Authentication without Users

Is it possible to use Symfony's access token authentication feature without the concept of users somehow?

My app is an API. The API should be available only for my clients. So in order to use that API you have to use a Bearer authentication token. You can get this token from my other app.
When making requests to my API, I just want to check if the token exists by making a HTTP request to my other app. I don't care about an identity of the user.

Here’s the `getUserBadgeFrom` method in my `AccessTokenExtractor` class:

public function getUserBadgeFrom(string $accessToken): UserBadge
{
try {
$response = $this->httpClient->request('GET', $this->authServerUrl . '/customer', [
'headers' => [
'Authorization' => 'Bearer ' . $accessToken,
],
]);

if ($response->getStatusCode() !== 200) {
throw new BadCredentialsException('Invalid credentials.');
}

/** @var array{id: int, email_address: string, full_name: string} $data */
$data = $response->toArray();

return new UserBadge($data['email_address']);
} catch (Throwable $e) {
throw new AuthenticationException('Authentication failed: .' . $e->getMessage(), 0, $e);
}
}


However, this approach doesn’t work because Symfony expects me to register a user provider.

Is there a way to bypass this requirement, or at least define a dummy user provider that doesn't require user entities? Any advice would be greatly appreciated!

https://redd.it/1itvsc8
@r_php
Use LiveCollectionType in existing form

I have a form for a job seeker. There's a field for job experiences(an array):
              $builder
->add('experiences', LiveCollectionType::class, [
'label' => 'job_experiences',
'entry_type' => JobExperienceType::class,
'allow_add' => true,
'allow_delete' => true,
'by_reference' => false,
])
->add('profile_picture', ResourceType::class, [
'label' => 'profile_picture',
])

I have no idea on how to make my form display as i want. I want something like this, but i can't make all my form live. I just want the experiences field to be live. I read the documentation but it talks about the entire form again, not just a field.

Any advices or resources please ?

https://redd.it/1itxi9n
@r_php
Symfony Twig Variables Not Available After {% include %}

Hello everyone,

I'm currently working on a Symfony project and I'm struggling to understand a behavior in Twig. I'm trying to centralize my variable definitions.

At first, I thought about defining them in twig.yaml as globals, but since some of my variables are service function calls, that's not possible. 😕

So I tried creating a separate Twig file to store my variables and including it in all the files that need them, but unfortunately, my template doesn't recognize them. 😞

Example that doesn't work (Error: "Variable name does not exist.")

{# base/base.html.twig #}

{% include "base/elements/variables.html.twig" %}

{{ name }} {# Throws an error #}

{# base/elements/variables.html.twig #}

{% set name = 'zerez' %}

Workaround that works, but I don't like it

Since it's a big project, I'd have to change a lot of variable references, which is not ideal.

{# base/base.html.twig #}

{% include "base/elements/variables.html.twig" with vars %}

{{ vars.name }} {# Works, but not convenient #}

Question:

Is there a better way to include a file in Twig and make the variables inside it globally accessible without having to use vars.something everywhere?

Thanks in advance for your help! 😊

https://redd.it/1itymik
@r_php
What s the best way to use bootstrap css and js inside twig?

I read the documentation that use webpack encore and import it inside app.js etc.

But is it for turbo use?

How do we access bootstrap css n js from twig?

https://redd.it/1iu0m0l
@r_php
Is Laravel still the best choice for development of web applications? Is there some alternative?

I am not blaming Laravel. I know everybody (from the PHP world) knows it. And they have large community, good support, etc... It is surely a good choice.

So, it looks like "why should I look over for something else"? But I've learned that long-lasting projects/frameworks/libraries (name it as you wish) will get overwhelmed at some time.

Isn't this the case of Laravel? Is it still the top choice?

https://redd.it/1itxemo
@r_php
Horrors of being a PHP dev in an old company

I just got a junior position at a small company who is in the market for over 15 years.

I had high hopes for this, the interview went great, they liked my github and my experience with other languages and data analysis. They said the system is made using a RAD software and deployed in "the cloud". I thought "ok, cool. some new things to learn at least".

That's when my dreams were crushed, the RAD system has enabled non php dev to write spaghetti code for years unchecked.

Nobody knows basic things like OOP or scalar types. Company is stuck at PHP 5.6 because of said spaghetti.

There's no svn or git to see what was modified, the only control is a database table saying "user X saved file Y" and hundreds of lines on top of each file saying what was modified.

Security is a fucking joke, not even an after thought.

They asked me to create an API to interact with the system, I was so fearful to have to build an API with php 5.6 but at least I only have to create a sdk in php, the api can be in whatever. >!but they dropped the database and nobody knows how to get up. its been 4 days and I'm still waiting!<

https://redd.it/1iu2ghz
@r_php
WIP A mini Symfony app that leverages some great features in the perspective of building APIs. Good for beginners.

Hello devs, this is a simple blogging platform https://github.com/abdellahrk/microblog that might be helpful to some beginners. Features are being added and some ideas as well.

While there are tons of resources and guides out there amongst which the Symfony Demo App, this could also complement and be of help.

https://redd.it/1iu5ydj
@r_php
Doubts about validation & doctrine collections

Hey

I am new to Symfony and recently noticed a few issues which are kind of bugging me.

While working on restful apis, I used #MapRequestPayload and #MapQueryString a lot, it seems like a nice feature, however there are unexpected behaviors. For example when you map to dto with required fields, and submit a request without body, you get HttpException from inside PayloadResolver, instead of validation related exception. Is this the most recommended way of handling data validation? I realize I can use ValidatorInterface and populate dtos manually, but this seems ugly and tedious.

Another thing, while working with lists of entities in query results, I noticed that doctrine collection offers very little functionality, and most operations end up being done on plain arrays using built in functions. Is it supposed to be like that in actual projects, or do you tend to install something to enhance collections?

https://redd.it/1iu7ezv
@r_php
I'm Joe Dixon, Engineering Team Lead of Laravel Cloud, Ask Me Anything!

Hey r/Laravel,

Next Monday, February 24, my team is launching Laravel Cloud to the world. Laravel Cloud is a fully managed infrastructure platform optimized specifically for Laravel and PHP.

I'll be hosting an AMA next Thursday, February 27 to answer your questions about Laravel Cloud. Add your questions below and I'll see you then!

https://redd.it/1iu8l8g
@r_php
Finally Integrated PayPal with Laravel—I will make rent this month

Hi everyone,

I’ve been using Paystack for payment processing on Maasai Market Online, but recently, one of my customers couldn’t complete a payment. That was a turning point—I needed a better solution for international payments.

I tried multiple PayPal packages for Laravel, and let’s just say... it wasn’t smooth sailing. Some had outdated docs, others threw weird errors. But after a lot of trial and error, I finally found the right package that works perfectly with Laravel—no issues at all!

Since Stripe isn’t available in my country and Lemon Squeezy doesn’t support physical goods, PayPal was the best option. I’m still a newbie and my project is still at its MVP stage, but every challenge makes me learn and appreciate Laravel even more.

If anyone is struggling with PayPal integration, I put together a GitHub Gist with a step-by-step guide:
PayPal Integration for Laravel 11

Hope it helps! Let me know what payment processors you’re using in your Laravel projects.

https://redd.it/1iu96hj
@r_php
Twig sandbox evaluate expression and filter the values

I have this in my twig:

$twig->render(
'{{ x + y }}',
'x' => 10, 'y' => 2
);


How to change Twig sandbox to evaluate x + y as an empty string if either x or y are empty (null)?

I tried to add a filter, like this:

$twig->addFilter(new TwigFilter('checkNull', function (string $value) {

}));


but I dont understand how to check the single values also if I pass them to the callback.

How can I check the two values before the expression is executed?

x + y|checkNull


I cannot find a good example onlline. Thanks for any help.

https://redd.it/1iumh5k
@r_php
Form login with user+password giving 302code upon success

Is this correct behavior?

I tried form login. While successfully routing to intended page, the profiler shows 302 status code. And bootstrap css and js didnt work. I have to manually refresh the page for bootstrap css and js to work.

Same case happens with logout. It redirect to login page as intended but with 302status code and bootstrap js/css didnt work. The usernamefield also empty. It s supposed to be filled with last username. Upon refreshing the page, the bootstrap css/js work and last username appears.

https://redd.it/1iumgae
@r_php
Best PHP Framework for developing middleware/microservice/API layer

Looking for recommendations! (Please don't recommend Go/Nodejs, only PHP based) 🚀

We're planning to develop a microservice in PHP and are considering async frameworks for better performance. In your experience, which PHP async framework is the fastest and most efficient for handling high-load scenarios?

Some of the short-listed candidates:

Laravel Octane (w/ Swoole)
Symfony w/ Swool runtime

Would love to hear your thoughts—any suggestions or real-world insights would be super helpful! 🙌

https://redd.it/1iux03n
@r_php