Steps to create a Contact Form in Symfony With SwiftMailer

In this article, we are going to discuss about How we can create a contact form in Symfony with SwiftMailer. Symfony provides an architecture, components and tools for developers to build complex web applications faster. Choosing symfony allows you to release your applications earlier, host and scale them without problem, and maintain them over time with no surprise.

Swift Mailer is a component based library for sending e-mails from PHP applications. Swift Mailer supports PHP 7.0 to PHP 8.1 included (proc_* functions must be available). Swift Mailer does not work when used with function overloading as implemented by mbstring when mbstring.func_overload is set to 2.

At the end of this article, we will be created a contact form in Symfony using Form Builder and connected with SwiftMailer bundle. So that, the visitor could receive acknowledgement that the messages has been successfully sent.

Step 1: Create Contact Entity with Doctrine

First of all we need to create and configure the database. Database related information and credentials are available in Application Access details panel. Add these to the app/config/parameters.yml

parameters:

   database_host: localhost
   database_port: <PORT>
   database_name: <DB_NAME>
   database_user: <DB_user_name>
   database_password: <DB_password>

Next, we need to create a contact entity with Doctrine. To use Doctrine, open SSH terminal and go to your Symfony project:

  1. cd application/{your_app_folder}/public_html

Now run the following command to start the entity generator:

  1. php bin/console doctrine:generate:entity

For the contact form I need four fields: name, email, subject, message. You can add more fields as per your requirements. The entity name will be Contact and the shortcut name will be AppBundle:Contact. Annotation will be Yaml, so just press the Enter key on this.

Now go to src/AppBundle/Entity. You will see a Contact.php file in which Doctrine has created a new method for every field. I will use these methods to set values in the Controller:

  1. <?php
  2. namespace AppBundle\Entity;
  3. use Doctrine\ORM\Mapping as ORM
  4. /**
  5. * Contact
  6. *
  7. * @ORM\Table(name="contact")
  8. * @ORM\Entity(repositoryClass="AppBundle\Repository\ContactRepository")
  9. */
  10. class Contact
  11. {
  12. /**
  13. * @var int
  14. *
  15. * @ORM\Column(name="id", type="integer")
  16. * @ORM\Id
  17. * @ORM\GeneratedValue(strategy="AUTO")
  18. */
  19. private $id;
  20. /**
  21. * @var string
  22. *
  23. * @ORM\Column(name="name", type="string", length=255)
  24. */
  25. private $name;
  26. /**
  27. * @var string
  28. *
  29. * @ORM\Column(name="email", type="string", length=255)
  30. */
  31. private $email;
  32. /**
  33. * @var string
  34. *
  35. * @ORM\Column(name="subject", type="string", length=255)
  36. */
  37. private $subject;
  38. /**
  39. * @var string
  40. *
  41. * @ORM\Column(name="message", type="string", length=255)
  42. */
  43. private $message;
  44. /**
  45. * Get id
  46. *
  47. * @return int
  48. */
  49. public function getId()
  50. {
  51. return $this->id;
  52. }
  53. /**
  54. * Set name
  55. *
  56. * @param string $name
  57. *
  58. * @return Contact
  59. */
  60. public function setName($name)
  61. {
  62. $this->name = $name;
  63. return $this;
  64. }
  65. /**
  66. * Get name
  67. *
  68. * @return string
  69. */
  70. public function getName()
  71. {
  72. return $this->name;
  73. }
  74. /**
  75. * Set email
  76. *
  77. * @param string $email
  78. *
  79. * @return Contact
  80. */
  81. public function setEmail($email)
  82. {
  83. $this->email = $email;
  84. return $this;
  85. }
  86. /**
  87. * Get email
  88. *
  89. * @return string
  90. */
  91. public function getEmail()
  92. {
  93. return $this->email;
  94. }
  95. /**
  96. * Set subject
  97. *
  98. * @param string $subject
  99. *
  100. * @return Contact
  101. */
  102. public function setSubject($subject)
  103. {
  104. $this->subject = $subject;
  105. return $this;
  106. }
  107. /**
  108. * Get subject
  109. *
  110. * @return string
  111. */
  112. public function getSubject()
  113. {
  114. return $this->subject;
  115. }
  116. /**
  117. * Set message
  118. *
  119. * @param string $message
  120. *
  121. * @return Contact
  122. */
  123. public function setMessage($message)
  124. {
  125. $this->message = $message;
  126. return $this;
  127. }
  128. /**
  129. * Get message
  130. *
  131. * @return string
  132. */
  133. public function getMessage()
  134. {
  135. return $this->message;
  136. }
  137. }

Next, we will work on the Controller and the form View.

Step 2: Create the Form in DefaultController.php

The next step is to create a form in the controller. You can also create a form in the Twig view. However, in this article, I will initialize the form fields using the Symfony’s form builder, and then show the form Widget in the View.

Open DefaultController.php and add the following namesapaces and the entity (created earlier):

  1. namespace AppBundle\Controller;
  2. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
  3. use Symfony\Bundle\FrameworkBundle\Controller\Controller;
  4. use Symfony\Component\HttpFoundation\Request;
  5. use Symfony\Component\HttpFoundation\Response;
  6. use Symfony\Component\Form\Extension\Core\Type\TextType;
  7. use Symfony\Component\Form\Extension\Core\Type\TextareaType;
  8. use Symfony\Component\Form\Extension\Core\Type\DateTimeType;
  9. use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
  10. use Symfony\Component\Form\Extension\Core\Type\SubmitType;
  11. use Symfony\Component\HttpFoundation\Session\Flash\FlashBag;
  12. use AppBundle\Entity\Contact;

Now in the createAction() method, create an entity object and pass it to the form builder. The form contains the input fields (as discussed earlier).

  1. class DefaultController extends Controller
  2. {
  3. /**
  4. * @Route("/form", name="homepage")
  5. */
  6. public function createAction(Request $request)
  7. {
  8. $contact = new Contact;
  9. # Add form fields
  10. $form = $this->createFormBuilder($contact)
  11. ->add('name', TextType::class, array('label'=> 'name', 'attr' => array('class' => 'form-control', 'style' => 'margin-bottom:15px')))
  12. ->add('email', TextType::class, array('label'=> 'email','attr' => array('class' => 'form-control', 'style' => 'margin-bottom:15px')))
  13. ->add('subject', TextType::class, array('label'=> 'subject','attr' => array('class' => 'form-control', 'style' => 'margin-bottom:15px')))
  14. ->add('message', TextareaType::class, array('label'=> 'message','attr' => array('class' => 'form-control')))
  15. ->add('Save', SubmitType::class, array('label'=> 'submit', 'attr' => array('class' => 'btn btn-primary', 'style' => 'margin-top:15px')))
  16. ->getForm();
  17. # Handle form response
  18. $form->handleRequest($request);

Step 3: Create View for the Contact Form

To view this form on the Twig template, create a file form.html.twig in app/Resources/views/default and add the form widget to it.

  1. {% block body %}
  2. <div class="container">
  3. <div class="row">
  4. <div class="col-sm-4">
  5. <h2 class=page-header>Contact Form in Symfony</h2>
  6. {{form_start(form)}}
  7. {{form_widget(form)}}
  8. {{form_end(form)}}
  9. </div>
  10. </div>
  11. </div>
  12. {% endblock %}

I have added bootstrap classes to the code. I will now add the bootstrap CDN to base template to make the classes work.

Open the base.html.twig from app/Resources/views and add the CDN links to it.

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8" />
  5. <title>{% block title %}Welcome!{% endblock %}</title>
  6. {% block stylesheets %}{% endblock %}
  7. <link rel="icon" type="image/x-icon" href="{{ asset('favicon.ico') }}" />
  8. <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
  9. <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
  10. </head>
  11. <body>
  12. <div class="alert alert-success">
  13. {% set flashbag_notices = app.session.flashbag.get('notice') %}
  14. {% if flashbag_notices is not empty %}
  15. <div class="flash-notice">
  16. {% for notice in flashbag_notices %}
  17. {{notice}}
  18. {% endfor %}
  19. </div>
  20. {% endif %}
  21. {% block body %}{% endblock %}
  22. </div>
  23. {% block javascripts %}{% endblock %}
  24. </body>
  25. </html>

Now I need to extend form.html.twig with base.html.twig by simply adding the following line at the top.

  1. {% extends 'base.html.twig' %}

At this point, if you hit the /form Route, you will get the following Form:

Step 4: Save Values in the Database

Next, we will save the values in database. We have already created the form in the DefaultController class. First, we will save the values in variables and then pass these variables to the related methods in the entity. Finally, we will save the variables through the persist() method.

  1. # check if form is submitted
  2. if($form->isSubmitted() && $form->isValid()){
  3. $name = $form['name']->getData();
  4. $email = $form['email']->getData();
  5. $subject = $form['subject']->getData();
  6. $message = $form['message']->getData();
  7. # set form data
  8. $contact->setName($name);
  9. $contact->setEmail($email);
  10. $contact->setSubject($subject);
  11. $contact->setMessage($message);
  12. # finally add data in database
  13. $sn = $this->getDoctrine()->getManager();
  14. $sn -> persist($contact);
  15. $sn -> flush();

Now, when the form is submitted, the values will be available in the database.

Step 5: Send Acknowledgement to the User

It is important to tell the user that their message has been successfully delivered to the website. Many websites send an email that provides all user-submitted data in a proper format.

For this purpose, I will use SwiftMailer, a bundle that comes preinstalled in Symfony 3. To use it, you just need to configure it. To do the necessary changes, open app/config/parameters.yml under parameters

  1. mailer_transport: gmail
  2. mailer_host: smtp.gmail.com
  3. mailer_user: <SMTP_USERNAME>
  4. mailer_password: <SMTP_PASSWORD>
  5. secret: Itmaybeanything
  6. encryption: tls

Now in the config.yml, add the following code to get the values:

  1. # Swiftmailer Configuration
  2. swiftmailer:
  3. transport: "%mailer_transport%"
  4. host: "%mailer_host%"
  5. username: "%mailer_user%"
  6. password: "%mailer_password%"
  7. spool: { type: memory }

The configuration process is over. Now, open DefaultController.php and add the code for SwiftMailer. I will use the same data variables in this code:

  1. $message = \Swift_Message::newInstance()
  2. ->setSubject($subject)
  3. ->setFrom('shahroznawaz156@gmail.com')
  4. ->setTo($email)
  5. ->setBody($this->renderView('default/sendemail.html.twig',array('name' => $name)),'text/html');
  6. $this->get('mailer')->send($message);

Notice that you can also send email templates. In this code snippet, I sent the email template I created (sendemail.html.twig) in the views/default. This template has a simple test message.

  1. {# app/Resources/views/Emails/sendemail.html.twig #}
  2. <h3>You did it</h3>
  3. Hi {{ name }}! Your Message is successfully Submitted.
  4. We will get back to you soon!
  5. Thanks!

Now, when you submit the form, you will get an acknowledgment email in your inbox.

If you have a query or would like to contribute to the discussion, do leave a comment.

How to implement Functional Test in Symfony 4 with Kahlan 4

In this tutorial, we are going to discuss about how to implement the functional testing in Symfony 4 with Kahlan 4. In IT world, whenever we are creating an application/website, we need to test the application/website thouroghly. To perform the functional testing we have a bundle in Symfony 4. 

The simplest way is define Symfony 4 skeleton bootstrap in kahlan config, and use its property at specs, for example, we configure config at kahlan-config.php as follows:

suite()->root();
    $root->beforeAll(function () {
        $this->request = Request::createFromGlobals();
        $this->kernel  = new Kernel('test', false);
    });
    return $next();
});

Above settings are minimal, if you need more setup, you can define there. If you didn’t require kahlan/kahlan:^4.0, you can require via composer:

$ composer require --dev kahlan/kahlan:^4.0

Give a try

Let’s try testing a famous /lucky/number from LuckyController. We have the following controller:

render('lucky/number.html.twig', [
            'number' => $number,
        ]);
    }
}

And our twig file is:

{# templates/lucky/number.html.twig #}
<h1>Your lucky number is {{ number }}</h1>

We can place test under spec directory at root directory, for its test, we can create a spec/Controller directory:

kahlan.config.php
    spec
        Controller

Now, we can create the test as follows with make request to the ‘/lucky/number’ page and get its response. We can use toMatchEcho matcher provided with regex to get match random number of mt_rand(0, 100) that printed inside a response html content:

request->create('/lucky/number', 'GET');
            $response = $this->kernel->handle($request);
 
            expect(function () use ($response) {
                $response->send();
            })->toMatchEcho(
                "#Your lucky number is ([0-9]|[1-8][0-9]|9[0-9]|100)#"
            );
 
        });
 
    });
 
});

Time to run it with command:

$ vendor/bin/kahlan 

By running the above commmand, you will get an Output.

Display personalised content in Drupal - Smart Content Paragraphs

In this tutorial we are going to discuss about, how to display the personalised content (Paragraphs) for each person (both anonymous and authenticated users) in Drupal.

Smart content module allows personalised blocks only. If we need to display the personalised Paragraphs, then we need to go for Smart Content Paragraphs module which will supports Paragraphs as well. 

Dependent Modules 

  • Paragraphs (https://www.drupal.org/project/paragraphs)
  • Smart Content (https://www.drupal.org/project/smart_content)
  • Smart Content Segments (https://www.drupal.org/project/smart_content_segments) 
Smart Content Paragraphs uses conditions, within Segments, to determine whether or not to display the reaction(s) defined within a Decision Block. A Condition is a single case that can be tested and determined to be either true or false, multiple conditions can be included in a Segment and a Segment Set is one or more Segments grouped together.

Click Here to Donwload the Module

Click Here to view the releases

Create custom theme in Drupal 8

In this tutorial we are going to discuss about, How to create custom theme (template) in Drupal 8 PHP CMS. By creating custom theme, we can customize the look and feel of the website as per our wish instead of using the pre-defined template or third party templates.

To create a new template, we have to follow the following steps.

  • Create YAML (.yml) file
  • Edit YAML (.yml) file
  • Remove stylesheets
  • Clear the cache
  • Optimize the Website
  • Add CSS
  • Add Javascript

Step 1: Create YAML (.yml) file

In Drupal 8, YAML file (.yml) is used in the place of .INFO files (used in Drupal 7) to tell the website that the theme exists. Similarly, the directories that contain the theme and the files with theme details have also been changed.
  • Create a folder with the theme name which we are going to create like (first_theme) inside the <root>/theme folder.
  • Create a new file inside the folder with the name first_theme.info.yml.

Step 2: Edit YAML file

Open the YAML file in your preferred text editor and enter the following details:

name: first_theme
description: Enter some description about your template
type: theme
core: 8.x

Type is theme and core is the version of Drupal you are creating the theme for (In this is case it is Drupal 8, so 8.x).

Now go to your Drupal website and check if the new theme appears in the Drupal appearance section. If all the steps have been correctly followed, the theme will appear in the uninstalled section of your website’s appearance tab.

Click install and set as default to set this theme as default.

Step 3: Remove Stylesheets (Optional)

After you have set the new theme as default, and then navigate to the website’s homepage, you will notice that nothing has changed. This is because Drupal includes several stylesheets that loads by default. In many cases, the best strategy is to disable some of these stylesheets. 

To find out these stylesheets,  you will need to inspect the source code by right-clicking and selecting View Source from the context menu and determine which CSS files you wish to remove, the rest of the process is pretty straightforward.

Go back to the first_theme.info.yml file and edit it. To remove the stylesheets you want, add this text:

stylesheets-remove
 -“stylesheet to be removed”

Step 4: Clear the Cache

Now login to your Drupal website’s admin panel. Next, go to Configuration >> Performance and click Clear all caches.

Step 5: Optimize the Website

Next, go back to the Performance page and uncheck Aggregate CSS files and Aggregate JavaScript files in the Bandwidth Optimization section. This will help in speeding up the performance of the website.

Step 6: Add CSS

It is time to add reference to the CSS file that will be used for/by the theme. To do this, go to the theme’s folder and create a new file named first_theme.libraries.yml and update the file with css files which we are going to use in the theme.

global-css:
 css:
  theme:
   css/style.css:{}
   
Now, add the library in the first_theme.info.yml file as well. To do this, add the below code in the file.

libraries:
 -first_theme/global-css

Step 7: Add JavaScript Reference

To add reference to the JavaScript reference to the theme, add the below code snippet to the first_theme.libraries.yml file.

global-js:
 js:
  js/site.js:{}
 dependencies:
  -core/jquery
  
Now, add the the JavaScript library in the first_theme.info.yml file.

-first_theme/global-js

Finally the  first_theme.info.yml will looks like below,

name: first_theme
description: Enter some description about your template
type: theme
core: 8.x

libraries:
 -first_theme/global-css
 -first_theme/global-js

XML Views in CakePHP

In this article, we are going to discuss about how to return XML response to views in CakePHP. CakePHP is an open source web application framework. It follows the Model-View-Controller (MVC) approach and is written in PHP, modeled after the concepts of Ruby on Rails, and distributed under the MIT License.CakePHP uses well-known software engineering concepts and software design patterns, such as Convention over configuration, Model-View-Controller, Active Record, Association Data Mapping, and Front Controller.

Step 1:

Open the file "app\Config\routes.php" and added the following line:

/**
 * Parse XML Routes
 */
Router::parseExtensions('xml');

This enables your Controller actions to start accepting the .xml postfix e.g. http://cakephp_app/controller/action.xml

Step 2:

Enable the RequestHandler component in your Controller like this:

public $components = array('RequestHandler');

Step 3:

Once that's done, you have a few more methods at your disposal to start dealing with XML requests. First create a beforeFilter method in your Controller and add the following:

public function beforeFilter() {
    parent::beforeFilter();

    // Set XML
    if ($this->RequestHandler->isXml()) {
       $this->RequestHandler->setContent('xml');
    }
}

Step 4:

Once that's done, create the action that you want to use and be sure to add in the respondAs & renderAs methods as the official documentation is a bit flakey with their use:

public function related() {
    // Only allow XML requests
    if (!$this->RequestHandler->isXml()) {
        throw new MethodNotAllowedException();
    }

    // Set response as XML
    $this->RequestHandler->respondAs('xml');
    $this->RequestHandler->renderAs($this, 'xml');
}

Step 5:

Using those 2 methods as I was then able to create an xml folder in the corresponding View folder and inside that create my view file e.g. app\View\Uploads\xml\related.ctp

<?xml version="1.0"?>
<people>
<person>
<name>James</name>
</person>
</people>

Now if you visited the page in your browser you should see your XML output as per your View e.g. http://cakephp_app/uploads/related.xml

Wrapping Up

Further to this if you wanted to pass in some parameters to make the Controller action dynamic you can do by using the following e.g. http://cakephp_app/uploads/related/videos/1.xml

The "videos" parameter and the "1" ID will be available in the Controller like this:

// Get passed params
$uploadType = $this->request->params['pass'][0];
$uploadId = $this->request->params['pass'][1];

Automatically Create a Bit.ly URL for WordPress Posts

In this article, we are going to discuss about How to create Bit.ly URL for WordPress posts automatically. Bit.ly is currently the most popular URL shorting service out there and for a good reason too. With bit.ly you can track your shortened URLs and much more. In this article I'm going to show you how to use bit.ly's api create bit.ly urls automatically for WordPress posts.

In order to make use of Bit.ly's API, you'll need to:

  1. Signup at Bit.ly
  2. Get your API Key


Now that you have a login and API key, open your WordPress theme's functions.php (just create one if you don't have one) and paste the following code at the top of the document:

//create bit.ly url
function bitly()
{
    //login information
    $url = get_permalink();  //generates wordpress' permalink
    $login = 'imjp';    //your bit.ly login
    $apikey = 'R_11882237eac772b5d6126e895a06c43f'; //bit.ly apikey
    $format = 'json';   //choose between json or xml
    $version = '2.0.1';
     
    //create the URL
    $bitly = 'http://api.bit.ly/shorten?version='.$version.'&longUrl='.urlencode($url).'&login='.$login.'&apiKey='.$apikey.'&format='.$format;
     
    //get the url
    //could also use cURL here
    $response = file_get_contents($bitly);
     
    //parse depending on desired format
    if(strtolower($format) == 'json')
    {
        $json = @json_decode($response,true);
        echo $json['results'][$url]['shortUrl'];
    }
    else //xml
    {
        $xml = simplexml_load_string($response);
        echo 'http://bit.ly/'.$xml->results->nodeKeyVal->hash;
    }
}

The code above is pretty much self explanatory.

Don't forget to change the login and apikey strings to match yours.

I hope you guys found this article useful.

TZ Portfolio - A joomla portpolio component / Module / Plugin download

TZ Portfolio works on database of comcontent, sothat you do not have to worry about importing or exporting data from your system (which already works with comcontent). TZ Portfolio inherits all current functions of com_content, in addition, we develop two new data interfaces: Portfolio and Timeline view. TZ Portfolio is strongly supported by Group Extra field system, you can create multi-portfolio system in your website. In addition, it supply 3 functions , these are video display, gallery or representative photo displayed for each article.

We also upgrade tag and authority information management function, along with photo smart resize and crop. With TZ Portfolio you can own a smart blog, a flexible portfolio, and more than a complete content management system.

Extension Name: TZ Portfolio

Price: Free

More info and reviews: TZ Portfolio on JED

For Demo - Click Here

To download the component - Click Here

For Documentation - Click Here

For Support - Click Here

Create Helloworld module in Magento

In this article, we are going to discuss about How to create a Helloworld custom module in Magento. Magento is an open-source content management system for e-commerce web sites. Magento employs the MySQL relational database management system, the PHP programming language, and elements of the Zend Framework. It applies the conventions of object-oriented programming and model-view-controller architecture. Magento also uses the entity–attribute–value model to store data.

Step 1: Module Declaration

Note : PCF (PHPCmsFramework)

Create app/etc/modules/PCF_HelloWorld.xml and write below code

<?xml version="1.0"?>
<config>
    <modules>
        <PCF_HelloWorld>
            <active>true</active>
            <codePool>local</codePool>
        </PCF_HelloWorld>
    </modules>
</config>

Step 2: Module Configuration

2.1) Create a controller class app/code/local/PCF/HelloWorld/controllers/IndexController.php

class PCF_HelloWorld_IndexController extends Mage_Core_Controller_Front_Action
{
    public function indexAction()
    {
     $this->loadLayout(array('default'));
     $this->renderLayout();
    }
}

2.2) Create a Block class app/code/local/PCF/HelloWorld/Block/HelloWorld.php

class PCF_HelloWorld_Block_HelloWorld extends Mage_Core_Block_Template
{
  // necessary methods
}

2.3) create configuration xml in app/code/local/PCF/HelloWorld/etc/config.xml

<?xml version="1.0"?>
<config>
    <global>
        <modules>
                <PCF_helloworld>
                        <version>0.1.0</version>
                </PCF_helloworld>
        </modules>
    <blocks>
            <helloworld>
                <rewrite>
         <helloworld>PCF_HelloWorld_Block_HelloWorld</helloworld>
        </rewrite>
            </helloworld>
     </blocks>

        </global>
       <frontend>
                <routers>
                        <helloworld>
                                <use>standard</use>
                                <args>
                                      <module>PCF_HelloWorld</module>
                                      <frontName>helloworld</frontName>
                                </args>
                        </helloworld>
                </routers>
        <layout>
            <updates>
                <helloworld>
                      <file>helloworld.xml</file>
                </helloworld>
            </updates>
            </layout>
        </frontend>
</config>


Define Frontend Template :

1. Define page layout in app/design/frontend/PCF/default/layout/helloworld.xml

N.B: Use default instead of PCF as template location if you use default design packages. Means create file in app/design/frontend/default/default/layout/helloworld.xml

<?xml version="1.0"?>

    <layout version="0.1.0">

        <helloworld_index_index>
            <reference name="root">
                <action method="setTemplate"><template>page/1column.phtml</template></action>
            </reference>
            <reference name="content">
                <block type="helloworld/helloworld" name="hello" template="helloworld/helloworld.phtml"/>
            </reference>
        </helloworld_index_index>

    </layout>
   
2. Create template file app/design/frontend/PCF/default/template/helloworld/helloworld.phtml and write down

N.B: Use default instead of PCF as template location if you use default design packages. Means create file in app/design/frontend/default/default/template/helloworld/helloworld.phtml

Hello World ! I am a Magento Guy..

Hey, new module is ready to run and hit browser with url

http://127.0.0.1/projectname/index.php/helloworld/

and see result.

That's it……..