master

laravel/framework

Last updated at: 29/12/2023 09:24

CreatesPotentiallyTranslatedStrings.php

TLDR

This file is a trait called CreatesPotentiallyTranslatedStrings. It has a single method pendingPotentiallyTranslatedString which creates and returns an instance of the PotentiallyTranslatedString class.

Methods

pendingPotentiallyTranslatedString

This method creates a pending potentially translated string. It takes two parameters - $attribute (a string) and $message (a nullable string). It returns an instance of the PotentiallyTranslatedString class.

Classes

PotentiallyTranslatedString

This class is a subclass of PotentiallyTranslatedString. It represents a potentially translated string. It has the following properties and methods:

  • protected $destructor: A closure that is called when the object is destroyed.
  • public function __construct($message, $translator, $destructor): The constructor method that initializes the PotentiallyTranslatedString instance. It takes three parameters - $message (a string), $translator (an instance of Translator), and $destructor (a closure).
  • public function __destruct(): The destructor method that handles the object's destruction. It calls the $destructor closure passing the string representation of the object.

END

<?php

namespace Illuminate\Translation;

trait CreatesPotentiallyTranslatedStrings
{
    /**
     * Create a pending potentially translated string.
     *
     * @param  string  $attribute
     * @param  string|null  $message
     * @return \Illuminate\Translation\PotentiallyTranslatedString
     */
    protected function pendingPotentiallyTranslatedString($attribute, $message)
    {
        $destructor = $message === null
            ? fn ($message) => $this->messages[] = $message
            : fn ($message) => $this->messages[$attribute] = $message;

        return new class($message ?? $attribute, $this->validator->getTranslator(), $destructor) extends PotentiallyTranslatedString
        {
            /**
             * The callback to call when the object destructs.
             *
             * @var \Closure
             */
            protected $destructor;

            /**
             * Create a new pending potentially translated string.
             *
             * @param  string  $message
             * @param  \Illuminate\Contracts\Translation\Translator  $translator
             * @param  \Closure  $destructor
             */
            public function __construct($message, $translator, $destructor)
            {
                parent::__construct($message, $translator);

                $this->destructor = $destructor;
            }

            /**
             * Handle the object's destruction.
             *
             * @return void
             */
            public function __destruct()
            {
                ($this->destructor)($this->toString());
            }
        };
    }
}