Symfony3 Container Dependency Injection

It’s 2016, you can use trait which will help you extend same class with multiple libraries.

I keep seeing container class get extended into another class, which then extends to another, before you know it you have extended 5 different classes just to use libraries.

What if you can include 5 different libraries into 1 object without extending? Well you can use it with php5.4 trait feature.

Container dependency injection trait class

    
    namespace iBasit\ToolsBundle\Utils\Lib;
    
    use Doctrine\Bundle\DoctrineBundle\Registry;
    use Symfony\Component\DependencyInjection\ContainerInterface;
    
    trait Container
    {
        private $container;
    
        public function setContainer (ContainerInterface $container)
        {
            $this->container = $container;
        }
    
        /**
         * Shortcut to return the Doctrine Registry service.
         *
         * @return Registry
         *
         * @throws \LogicException If DoctrineBundle is not available
         */
        protected function getDoctrine()
        {
            if (!$this->container->has('doctrine')) {
                throw new \LogicException('The DoctrineBundle is not registered in your application.');
            }
    
            return $this->container->get('doctrine');
        }
    
        /**
         * Get a user from the Security Token Storage.
         *
         * @return mixed
         *
         * @throws \LogicException If SecurityBundle is not available
         *
         * @see TokenInterface::getUser()
         */
        protected function getUser()
        {
            if (!$this->container->has('security.token_storage')) {
                throw new \LogicException('The SecurityBundle is not registered in your application.');
            }
    
            if (null === $token = $this->container->get('security.token_storage')->getToken()) {
                return;
            }
    
            if (!is_object($user = $token->getUser())) {
                // e.g. anonymous authentication
                return;
            }
    
            return $user;
        }
    
        /**
         * Returns true if the service id is defined.
         *
         * @param string $id The service id
         *
         * @return bool true if the service id is defined, false otherwise
         */
        protected function has ($id)
        {
            return $this->container->has($id);
        }
    
        /**
         * Gets a container service by its id.
         *
         * @param string $id The service id
         *
         * @return object The service
         */
        protected function get ($id)
        {
            if ('request' === $id)
            {
                @trigger_error('The "request" service is deprecated and will be removed in 3.0. Add a typehint for Symfony\\Component\\HttpFoundation\\Request to your controller parameters to retrieve the request instead.', E_USER_DEPRECATED);
            }
    
            return $this->container->get($id);
        }
    
        /**
         * Gets a container configuration parameter by its name.
         *
         * @param string $name The parameter name
         *
         * @return mixed
         */
        protected function getParameter ($name)
        {
            return $this->container->getParameter($name);
        }
    }

Your custom object, which will be service.

    namespace AppBundle\Utils;
    
    use iBasit\ToolsBundle\Utils\Lib\Container;
    
    class myObject
    {
        use Container;
    }

Your object service settings

     myObject: 
            class: AppBundle\Utils\myObject
            calls:
                - [setContainer, ["@service_container"]]

Call your service in controller

    $myObject = $this->get('myObject');

Quick Setup Mailgun with CloudFlare + Gmail

Mailgun Setup

  • Create a Mailgun account
  • Add your domain name (no www)
    domain.com
  • Keep the page open and open a new tab to CloudFlare

Cloudflare

  • Choose your site and select DNS Settings
  • Add the two Text records
  • Add the CNAME record
    • Make sure the cloudflare cloud is gray and not orange/active
  • Add the two MX records
    • Name domain.com (no www)
    • Mail handled by mxa.mailgun.org or mxb.mailgun.org

Back at Mailgun

  • Click add
    • Click Check DNS Records Now
  • It’ll tell you once it detects the updated DNS records

Email Forwarding

  • From Mailgun, choose Routes
  • Create Your First Route
  • Priority 10
  • Filter Expression This is where you list the email address you want to forward to gmail
    match_recipient("you@domain.com")
  • Actions This is the gmail address you want to receive your mail
    forward("me@gmail.com")
  • Description Name it something so you remember what it’s for

Use Gmail to send mail from your domain

  • Log in to Gmail and go to settings
  • Go to Accounts and Import
  • Go to Send mail as and select add another email you own
    • name: Anything you want
    • email address: name@domain.com (this should be the email you set up in the steps before)
    • Leave treat as an alias checked
    • Click Next Step
    • For the following info you’ll need to login to mailgun and use the info under Domain Information
    • SMTP Server Use SMTP Hostname from Mailgun
    • Username Use Default SMTP Login from Mailgun
    • Password Use Default Password from Mailgun
    • Leave Secured connection using TLS selected
    • Click add account
  • Once it’s verified you should be able to compose emails and list your new email in the from line so nobody needs to know it’s coming from your personal gmail account.

Setup Environment UAT + LIVE – GITHUB (Auto Deploy)

We will cover UAT and Live environments and exclude developer environment.

DEV environment for developer to code and test, before he push his commits to remote repository (github.com),  which will be auto deploy to UAT environment for everyone to test with other developers changes. Note – we wont be covering DEV environment.

UAT environment for testing the site and getting ready to push to live environment after we think all the bugs are fixed.

Live environment to have the latest version of the website.
Continue reading Setup Environment UAT + LIVE – GITHUB (Auto Deploy)

WordPress FIX HTML parsing issue – for Developers

It’s really annoying and waste loads of hours trying to fix how can one show example of php code, while still use visual editor for quick snapshots or fancy tools of tinyMCE and able to show color coding examples using google prettify.
Continue reading WordPress FIX HTML parsing issue – for Developers

MediaWiki WYSIWYG Editor Reset Images Bug [Solved]

For over 3 years no one wrote a solution for reset images caption error on mediawiki script, which also is on durpal and some other applications getting used, but its hard to believe that. link to bug

Continue reading MediaWiki WYSIWYG Editor Reset Images Bug [Solved]