PHPFixing
  • Privacy Policy
  • TOS
  • Ask Question
  • Contact Us
  • Home
  • PHP
  • Programming
  • SQL Injection
  • Web3.0

Sunday, February 20, 2022

[FIXED] Symfony - Retrieve current user from in a command file

 February 20, 2022     php, symfony     No comments   

Issue

I'am currently working on a very old Symfony 2.4 project.

I have created a CsvImportCommand file to create adding massive customers with a csv functionality.

I need to set the current logged-in user as the value of my column 'created_by', but i do not know how can i get this information.

I saw that i could get this information in the twig template with app.user or with get('security.context')->getToken()->getUser() in a controller file.

But i really do not know how can i retrieve this information in a command file.

Remember, it is a Symfony 2.4 project.

below are my codes, it returns an error : PHP Parse error: syntax error, unexpected '$this' (T_VARIABLE) (on my 2nd line)

class CsvImportCommand extends ContainerAwareCommand
{

    private $user = $this->get('security.context')->getToken()->getUser();
    private $username = $user->getUsername();

    protected function configure()
    {
        $this
            ->setName('csv:import')
            ->setDescription('Import users from CSV file')
        ;
    }

    protected function execute(InputInterface $input, OutputInterface $output)
    {
        $now = new \DateTime();
        $output->writeln('<comment>Start:' . $now->format('d-m-Y G:i:s') . '---</comment>');

        $this->import($input, $output);

        $now = new \DateTime();
        $output->writeln('<comment>End:' . $now->format('d-m-Y G:i:s') . '---</comment>');
    }

    protected function import(InputInterface $input, Outputinterface $output)
    {
        $data = $this->get($input, $output);

        $em = $this->getContainer()->get('doctrine')->getManager();

        $em->getConnection()->getConfiguration()->setSQLLogger(null);

        $size = count($data);
        $batchSize = 20;
        $i = 1;

        foreach($data as $row) {
            $person = $em->getRepository('MyBundle:Person')->findOneBy(array('firstname'=>$row['firstname'], 'lastname'=>$row['lastname']));

            if(!$person){
                $person = new Person();
                $em->persist($person);
            }
            $person->setIsPrivate($row['is_private']);
            $person->setCivility($row['civility']);
            $person->setFirstName($row['firstname']);
            $person->setLastName($row['lastname']);
            $person->setPhoneHome($row['phone_home']);
            $person->setMobileHome($row['mobile_home']);
            $person->setEmailPro($row['email_pro']);
            $person->setEmailHome($row['email_home']);
            $person->setCreatedAt(new \DateTime());
            $person->setUpdatedAt(new \DateTime());
            $person->setCreatedBy($username);

            if (($i % $batchSize) === 0) {
                $em->flush();
                $em->clear();

                $now = new \DateTime();
                $output->writeln('of users imported... | ' . $now->format('d-m-Y G:i:s'));
            }

            $i++;
        }

        $em->flush();
        $em->clear();
    }
}

Solution

Regarding your error:

you can't use $this in class variables. U have to assign $user in the __construct or u create set-Methods. Something like: setUser.

Regarding security-bundle with commands:

U can't use the security.context because u dont have a user in this section. Maybe u can fake it, but this is not so good.



Answered By - can.duendar
  • Share This:  
  •  Facebook
  •  Twitter
  •  Stumble
  •  Digg
Newer Post Older Post Home

0 Comments:

Post a Comment

Note: Only a member of this blog may post a comment.

Total Pageviews

Featured Post

Why Learn PHP Programming

Why Learn PHP Programming A widely-used open source scripting language PHP is one of the most popular programming languages in the world. It...

Subscribe To

Posts
Atom
Posts
Comments
Atom
Comments

Copyright © PHPFixing