Hello everybody ) I have TYPO3 version 7.6.18, and in my fluid mail templates translations not works.
That's is code in my controller which rendering mail template:
$emailView = $this->objectManager->get('TYPO3\\CMS\\Fluid\\View\\StandaloneView');
$ext_path = \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath("feusersplus");
$templatePathAndFilename = $ext_path.'Resources/Private/Mail/Admin/updateInfo.html';
$emailView->setTemplatePathAndFilename($templatePathAndFilename);
$emailView->assignMultiple(
array(
'hash' => $hash,
'userDetailPid' => $userDetailPid,
'userUid' => $user->getUid(),
'username' => $user->getUsername(),
'image' => $userValues['image'],
'aboutmyself' => $userValues['aboutmyself'],
'aboutmypartner' => $userValues['aboutmypartner'],
'aboutmyselfSeconduser' => $this->pluginVariables['aboutmyselfSeconduser'],
'aboutmypartnerSeconduser' => $this->pluginVariables['aboutmypartnerSeconduser'],
'imprint' => $this->extConf['address'],
'backgroundimage' => $up->getBackgroundimage(),
'uploadFolder' => FileUtility::getUploadFolderFromTca()
)
);
$emailBody = $emailView->render();
$message = $this->objectManager->get('TYPO3\\CMS\\Core\\Mail\\MailMessage');
$message->setTo($adminemail)
->setFrom(array($adminemail => $this->extConf['mailtitle']))
->setSubject( \TYPO3\CMS\Extbase\Utility\LocalizationUtility::translate('request_to_update_profile', 'feusersplus'));
$message->setBody($emailBody, 'text/html');
$message->send();
That's is small part from fluid
<table class="twelve columns">
<tr>
<td><h1><f:translate key='want_to_update_profile_information'/></h1></td>
</tr>
<tr>
<td><p><f:translate key='user'/> {username} <f:translate key='want_to_update_profile_information'/><br>
<f:translate key='image'/>: {image} <br>
<img src="http://abenteuertreff.ihr-layout.eu/fileadmin/files/Avatars/{image}" width="30%" height="auto"/><br>
<f:translate key='backgroundimage'/>: <br>
<f:image image="{backgroundimage}" absolute="true"/><br>
<br>
</p>
<p> </p>
<p><f:translate key='about_myself'/>: {aboutmyself} <br>
<f:translate key='about_my_partner'/>: {aboutmypartner} <br>
<f:translate key='about_myself'/> (<f:translate key='second_user'/>): {aboutmyselfSeconduser} <br>
<f:translate key='about_my_partner'/> (<f:translate key='second_user'/>): {aboutmypartnerSeconduser}</p>
<p> </p>
<f:link.action pageUid="{userDetailPid}" absolute="true" arguments="{showUid: userUid}" additionalParams="{updateHash: hash}" extensionName="feuserfriends" pluginName="userlist" controller="Friend">
<f:translate key='accept'/> accept
</f:link.action>
<br />
<br />
<hr />
</td>
</tr>
</table>
Help me please )
$emailView->getRequest()->setPluginName($requestPluginName);
$emailView->getRequest()->setControllerExtensionName($requestControllerExtensionName);
$emailView->getRequest()->setControllerName($requestControllerName);
$emailView->getRequest()->setControllerActionName($requestControllerActionName);
// if you have an extbase controller context you can set it too
$emailView->setControllerContext(...)
At least the ControllerExtensionName should be set, then the f:translate works.
I don't pass any ControllerContext to the view, but use
/**
* #param array $recipient recipient of the email in the format array('recipient#domain.tld' => 'Recipient Name')
* #param array $sender sender of the email in the format array('sender#domain.tld' => 'Sender Name')
* #param string $subject subject of the email
* #param string $templateName template name (UpperCamelCase)
* #param array $variables variables to be passed to the Fluid view
*/
protected function sendTemplateEmail(array $recipient, array $sender, $subject, $templateName, array $variables = array()) {
/** #var \TYPO3\CMS\Fluid\View\StandaloneView $emailView */
$emailView = $this->objectManager->get('TYPO3\\CMS\\Fluid\\View\\StandaloneView');
$extbaseFrameworkConfiguration = $this->configurationManager->getConfiguration(\TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface::CONFIGURATION_TYPE_FRAMEWORK);
$emailRootPath = \TYPO3\CMS\Core\Utility\GeneralUtility::getFileAbsFileName($extbaseFrameworkConfiguration['view']['templateRootPaths'][1]);
$templatePathAndFilename = $emailRootPath . 'Emails/' . $templateName . '.html';
$emailView->setTemplatePathAndFilename($templatePathAndFilename);
$emailView->assignMultiple($variables);
$emailBody = $emailView->render();
/** #var $message \TYPO3\CMS\Core\Mail\MailMessage */
$message = $this->objectManager->get('TYPO3\\CMS\\Core\\Mail\\MailMessage');
$message->setTo($recipient)
->setFrom($sender)
->setSubject($subject);
// Plain text example
// $message->setBody($emailBody, 'text/plain');
// HTML Email
$message->setBody($emailBody, 'text/html');
$message->send();
return $message->isSent();
}
and in the corresponding Fluid-Template
{f:translate(key: "want_to_update_profile_information", extensionName: "EXTENSIONKEY")}
$variablesin the controller is an PHP-array with needed key-valu-pairs for the fluid-Template of the E-Mail.
Of course the code has to be adapted where ever needed... (Template-Path and so on)
Related
I'm working with Codeigniter, on a sales targets' form for salesmen.
They have to input values for each product, locality, year, etc.
Product and locality are already get with existing database: no need to set rules (see controller).
When I checked the post (with enable_profiler of Codeigniter), I get this:
The problem is these datas don't insert into the database table.
I read and tested a lot, but always blocked.
Here is my model:
public function add($params)
{
$this->db->insert($this->table, $params);
return $this->db->insert_id();
}
My controller:
$this->load->library('form_validation');
$this->form_validation->set_rules('year', 'Year', 'required|integer');
$this->form_validation->set_rules('prevision', 'Prevision', 'required');
$this->form_validation->set_rules('value', 'Value', 'required|integer');
if ($this->form_validation->run()) {
$params = array(
'year' => $this->input->post('year'),
'prevision' => $this->input->post('prevision'),
'locality_id' => $this->input->post('locality'),
'product' => $this->input->post('product'),
'value' => $this->input->post('value'),
);
$this->Objectif_model->add($params);
redirect('admin/objectif');
} else {
$this->layout('admin/objectif/add');
}
And my view with inputs:
<?php foreach ($products as $product) : ?>
<tr class="form-group">
<td class="bg-warning">
<?= $product->grp_product; ?>
</td>
<td class="bg-warning product">
<?= $product->code; ?>
</td>
<?php foreach ($localities as $locality ) : ?>
<td>
<input type="text" class="form-control valeur" placeholder="Value k€" name="value[]" data-validation="number" data-validation-ignore="./" data-validation-optional="true" />
<input type="text" name="year[]" />
<input type="text" name="prevision[]" />
<input type="text" name="product[]" value="<?= $product->code ?>" />
<input type="text" name="localite_id[]" value="<?= $locality->id ?>" />
</td>
<?php endforeach; ?>
</tr>
<?php endforeach; ?>
Hope you will help me.
I find my answer.
In my controller, I had to pass each post in a variable and made a loop.
//action post in a var for each data
$id = $this->input->post('id');
$prev = $this->input->post('prevision');
$year= $this->input->post('year');
$locality_id = $this->input->post('locality_id');
$product = $this->input->post('product');
$value= $this->input->post('value');
if ($this->form_validation->run()) {
$count_id = count($id);
if (isset($id)) {
for ($i = 0; $i < $count_id; $i++) {
$obj[$i] = array(
'id' => $id[$i],
'prevision' => $prev,
'year' => $year,
'locality_id' => $locality_id[$i],
'product' => $product[$i],
'value' => $value[$i]*1000
);
} // endfor
if (isset($obj)) {
$this->Objectif_model->add_obj($obj);
} // endif
}// endif isset
}// endif form validation
I have a custom module which sends email to custom email address after successful purchase. It works well but now I need to get gift message from order.
Here is my Block code
<?php
namespace Test\Test2\Block\Vendor\Shipment;
class Items extends \Magento\Framework\View\Element\Template
{
const DEFAULT_TYPE = 'default';
public function getItemRenderer($type)
{
/** #var \Magento\Framework\View\Element\RendererList $rendererList */
$rendererList = $this->getRendererListName() ? $this->getLayout()->getBlock($this->getRendererListName()) : $this->getChildBlock('renderer.list');
if (!$rendererList) {
throw new \RuntimeException('Renderer list for block "' . $this->getNameInLayout() . '" is not defined');
}
$overriddenTemplates = $this->getOverriddenTemplates() ?: [];
$template = isset($overriddenTemplates[$type]) ? $overriddenTemplates[$type] : $this->getRendererTemplate();
$renderer = $rendererList->getRenderer($type, self::DEFAULT_TYPE, $template);
$renderer->setRenderedBlock($this);
return $renderer;
}
public function getItemHtml(\Magento\Framework\DataObject $item)
{
$block = $this->getItemRenderer($item->getProductType())->setItem($item);
return $block->toHtml();
}
}
and email template .phtml
<?php $_items = $block->getItems() ?>
<?php $_order = $block->getOrder() ?>
<?php if ($_items): ?>
<table class="items email-items shipment-items order-items">
<thead>
<tr>
<th class="item-info">
<?= /* #escapeNotVerified */ __('Items'); ?>
</th>
<th class="item-price">
<?= /* #escapeNotVerified */ __('Price'); ?>
</th>
<th class="item-qty">
<?= /* #escapeNotVerified */ __('Qty'); ?>
</th>
<th class="row-total">
<?= /* #escapeNotVerified */ __('Total'); ?>
</th>
</tr>
</thead>
<?php foreach ($_items as $_item): ?>
<?php
if ($_item->getParentItem()) {
continue;
}
?>
<tbody>
<?= $block->getItemHtml($_item) ?>
</tbody>
<?php endforeach; ?>
</table>
<?php $_giftMessage = $this->helper('Magento\GiftMessage\Helper\Message')->getGiftMessage($_order->getGiftMessageId()); ?>
<?php if ($_giftMessage): ?>
<br />
<table class="message-gift">
<tr>
<td>
<h3><?= /* #escapeNotVerified */ __('Gift Message for this Order') ?></h3>
<strong><?= /* #escapeNotVerified */ __('From:') ?></strong> <?= $block->escapeHtml($_giftMessage->getSender()) ?>
<br /><strong><?= /* #escapeNotVerified */ __('To:') ?></strong> <?= $block->escapeHtml($_giftMessage->getRecipient()) ?>
<br /><strong><?= /* #escapeNotVerified */ __('Message:') ?></strong>
<br /><?= $block->escapeHtml($_giftMessage->getMessage()) ?>
</td>
</tr>
</table>
<?php endif; ?>
<?php endif; ?>
Obviously, I receive this error message:
Uncaught Error: Call to a member function getGiftMessageId()
since my block does not have the method getOrder.
But if I try to copy getOrder method from Magento\Sales\Block\Order\Items:
/**
* Retrieve current order model instance
*
* #return \Magento\Sales\Model\Order
*/
public function getOrder()
{
return $this->_coreRegistry->registry('current_order');
}
with __construct part
/**
* #param \Magento\Framework\View\Element\Template\Context $context
* #param \Magento\Framework\Registry $registry
* #param array $data
* #param \Magento\Sales\Model\ResourceModel\Order\Item\CollectionFactory|null $itemCollectionFactory
*/
public function __construct(
\Magento\Framework\View\Element\Template\Context $context,
\Magento\Framework\Registry $registry,
array $data = [],
\Magento\Sales\Model\ResourceModel\Order\Item\CollectionFactory $itemCollectionFactory = null
) {
$this->_coreRegistry = $registry;
$this->itemCollectionFactory = $itemCollectionFactory ?: \Magento\Framework\App\ObjectManager::getInstance()
->get(\Magento\Sales\Model\ResourceModel\Order\Item\CollectionFactory::class);
parent::__construct($context, $data);
}
it still shows an error that order object in null. What am I doing wrong? Or how can I obtain order object in my case? Thanks.
I have seen this: https://waltherlalk.com/blog/dynamic-form-input-fields and have been active in this: Dynamically add form field rows - cakePHP. I have reached the stage where the setup is as per the original tutorial with changes made as per the Stackoverflow post from monsur.hoq.
The form is working fine but, upon saving, it only saves the 'student' part of the data: nothing is sent to grades. The add part of my controller currently looks like this:
public function add()
{
$student = $this->Students->newEntity();
if ($this->request->is('post')) {
$student = $this->Students->patchEntity($student, $this->request->data);
if ($this->Students->save($student)) {
$this->Flash->success(__('The student has been saved.'));
return $this->redirect(['action' => 'index']);
} else {
$this->Flash->error(__('The student could not be saved. Please, try again.'));
}
}
$this->set(compact('student'));
$this->set('_serialize', ['student']);
}
All code is as per bake or the tutorial shaped by the monsur.hoq post.
If anyone could help me to arrive at a working Cakephp3 example of the Walther Lalk tutorial I'd be very grateful.
The debugging toolbar shows the following SQL being produced on submitting the form:
INSERT INTO students (name, created, modified)
VALUES
(
'Test Two', '2016-09-13 16:04:07',
'2016-09-13 16:04:07'
)
All that serves to do is confirm the problem. Debugging in PHP Storm on form submission reveals the following:
$_POST = {array} [3]
_method = "POST"
name = "Test Four"
Grade = {array} [1]
0 = {array} [3]
id = ""
subject = "Maths"
grade = "3"
The add.ctp is as follows:
<nav class="large-3 medium-4 columns" id="actions-sidebar">
<ul class="side-nav">
<li class="heading"><?= __('Actions') ?></li>
<li><?= $this->Html->link(__('List Students'), ['action' => 'index']) ?></li>
<li><?= $this->Html->link(__('List Grades'), ['controller' => 'Grades', 'action' => 'index']) ?></li>
<li><?= $this->Html->link(__('New Grade'), ['controller' => 'Grades', 'action' => 'add']) ?></li>
</ul>
</nav>
<div class="students form large-9 medium-8 columns content">
<?= $this->Form->create($student) ?>
<fieldset>
<legend><?= __('Add Student') ?></legend>
<?php
echo $this->Form->input('name');
?>
</fieldset>
<fieldset>
<legend><?php echo __('Grades');?></legend>
<table id="grade-table">
<thead>
<tr>
<th>Subject</th>
<th>Grade achieved</th>
<th> </th>
</tr>
</thead>
<tbody></tbody>
<tfoot>
<tr>
<td colspan="2"></td>
<td class="actions">
Add grade
</td>
</tr>
</tfoot>
</table>
</fieldset>
<script id="grade-template" type="text/x-underscore-template">
<?php echo $this->element('grades');?>
</script>
<?= $this->Form->button(__('Submit')) ?>
<?= $this->Form->end() ?>
</div>
<script>
$(document).ready(function() {
//I changed undescore default template settings
_.templateSettings = {
interpolate: /\{\{(.+?)\}\}/g
}
var
gradeTable = $('#grade-table'),
gradeBody = gradeTable.find('tbody'),
gradeTemplate = _.template($('#grade-template').remove().text()),
numberRows = gradeTable.find('tbody > tr').length;
gradeTable
.on('click', 'a.add', function(e) {
e.preventDefault();
$(gradeTemplate({key: numberRows++}))
.hide()
.appendTo(gradeBody)
.fadeIn('fast');
})
.on('click', 'a.remove', function(e) {
e.preventDefault();
$(this)
.closest('tr')
.fadeOut('fast', function() {
$(this).remove();
});
});
if (numberRows === 0) {
gradeTable.find('a.add').click();
}
});
</script>
Change from CakePHP 2 to CakePHP 3 fields name conventions,
Grade.{$key}.grade to grades.{$key}.grade
Create View/Elements/grades.ctp file with the following contents.
https://waltherlalk.com/blog/dynamic-form-input-fields
<?php
$key = isset($key) ? $key : '<%= key %>';
?>
<tr>
<td>
<?= $this->Form->hidden('grades.{$key}.id') ?>
<?= $this->Form->text('grades.{$key}.subject'); ?>
</td>
<td>
<?= $this->Form->select("grades.{$key}.grade",
[
'A+',
'A',
'B+',
'B',
'C+',
'C',
'D',
'E',
'F'
],
[
'empty' => '-- Select grade --'
]); ?>
</td>
<td class="actions">
Remove grade
</td>
</tr>
I am trying to cancel validation in embedded forms based on a value from main form.
By default, embedded forms fields have validator option set to 'required'=>true. So it gets validated like that. If user leave any field blank, the form does not pass validation and blank fields get marked in template (different style).
What I am trying to do is to change option:"required" to false for all fields in embedded form.
I tried to do that in post validator callback method, but it seems that it is not possible that way.
The main form code:
class TestForma extends sfForm
{
public function configure()
{
$this->setWidgets(array(
'validate_items' => new sfWidgetFormChoice(array(
'choices' => array('no' => 'No', 'yes' => 'Yes'),
'multiple' => false,'expanded'=>true,'default' => 'no')),
));
$this->setValidators(array('validate_items' => new sfValidatorPass()));
$this->widgetSchema->setNameFormat('testforma[%s]');
$subForm = new sfForm();
for ($i = 0; $i < 2; $i++)
{
$form = new ItemForma();
$subForm->embedForm($i, $form);
}
$this->embedForm('items', $subForm);
$this->validatorSchema->setPostValidator(
new sfValidatorCallback(array('callback' => array($this, 'postValidate')))
);
}
Post-validator code:
public function postValidate($validator,$values)
{
$validatorSchema = $this->getValidatorSchema();
if($values['validate_items']=='no')
{
$itemsValidatorSchema = $validatorSchema['items'];
$itemsFieldsValidatorSchemes = $itemsValidatorSchema->getFields();
foreach($itemsFieldsValidatorSchemes as $itemValidatorScheme)
{
$itemValidatorScheme['color']->setOption('required',false);
$itemValidatorScheme['shape']->setOption('required',false);
}
}
return $values;
}
Embedded form class:
class ItemForma extends sfForm
{
public function configure()
{
$this->setWidgets(array(
'color' => new sfWidgetFormInputText(),
'shape' => new sfWidgetFormInput(),
));
$this->setValidators(array(
'color' => new sfValidatorString(array('required'=>true)),
'shape' => new sfValidatorEmail(array('required'=>true)),
));
$this->widgetSchema->setNameFormat('items[%s]');
}
}
Template code:
<form action="<?php echo url_for('weather/formiranje')?>" method="post">
<?php
foreach($form->getErrorSchema()->getErrors() as $e)
{
echo $e->__toString();
}
?>
<table>
<tfoot>
<tr>
<td colspan="2">
<input type="submit" value="OK" />
</td>
</tr>
</tfoot>
<tbody>
<tr><th>Main form</th></tr>
<tr><td><?php echo $form['validate_items']->renderLabel() ?>
<span class="<?php echo $form['validate_items']->hasError() ? 'rowError' : ''?>">
<?php echo $form['validate_items'] ?></span>
</td></tr>
<tr><td> </td></tr>
<tr><th>Embedded forms</th></tr>
<?php
foreach($form['items'] as $item)
{
?>
<tr>
<td><span class="<?php echo $item['color']->hasError() ? 'rowError' : ''?>">
<?php echo $item['color']->renderLabel() ?>
<?php echo $item['color'] ?></span>
</td>
</tr>
<tr>
<td><span class="<?php echo $item['shape']->hasError() ? 'rowError' : ''?>">
<?php echo $item['shape']->renderLabel() ?>
<?php echo $item['shape'] ?></span>
</td></tr>
<?php
}
echo $form['_csrf_token'];
?>
</tbody>
</table>
</form>
The way you organised it won't work because the post validator is run after all the field validators, so they've already been checked and marked as failed. (because the fields were required).
You could try the same approach you have here but with setting a preValidator instead of a postValidator. I think it should work then.
If it still won't work as expected what I would do is to change the default settings on the embedded form's fields to 'required' = false and use the postValidator. In the validator you could check whether or not you need to validate the embedded fields. If you need to validate them you can check if their values are set and if not you can throw errors for those fields. (I hope this is explained clearly)
Another thing you could try is to re-run the validation for the chosen fields. So something like that in your postValidator:
$itemValidatorScheme['color']->setOption('required',false);
$itemValidatorScheme['color']->clean($values['name_of_the_field']);
Constrains:
/**
* #ORM\Column(type="string", length=15)
* #Assert\Regex(pattern = "/[0-9a-z]+/", message = "[regexp] ERROR")
* #Assert\NotBlank(message = "[notblank] ERROR")
* #Assert\NotNull(message = "[notnull] ERROR")
* #Assert\Length
* (
* min = "2",
* max = "4",
* minMessage = "[minlength] ERROR",
* maxMessage = "[maxlength] ERROR"
* )
*/
private $type_name;
/**
* #ORM\Column(type="string", length=50)
* #Assert\Regex(pattern = "/[0-9a-zA-Z\.\:\s]+/", message = "[regexp] ERROR")
* #Assert\NotBlank(message = "[notblank] ERROR")
* #Assert\NotNull(message = "[notnull] ERROR")
* #Assert\Length
* (
* min = "4",
* max = "50",
* minMessage = "[minlength] ERROR",
* maxMessage = "[maxlength] ERROR"
* )
*/
private $description;
/**
* #ORM\Column(type="string", length=60)
* #Assert\Regex(pattern = "/[0-9a-zA-Z\.\/]+/", message = "[regexp] ERROR")
* #Assert\NotBlank(message = "[notblank] ERROR")
* #Assert\NotNull(message = "[notnull] ERROR")
* #Assert\Length
* (
* min = "4",
* max = "60",
* minMessage = "[minlength] ERROR",
* maxMessage = "[maxlength] ERROR"
* )
*/
private $starterPath;
Controller (typesAction and typesAddAction):
public function typesAction()
{
$em = $this->getDoctrine()->getManager();
$types = $em->getRepository('CsmBundle:Type')->findAll();
$newType = new Type();
$form = $this->createFormBuilder($newType)
->add('typeName', 'text')
->add('description', 'text')
->add('starterPath', 'text')
->getForm();
return $this->render('CsmBundle:Root:types.html.twig', array(
'types' => $types,
'form' => $form->createView()
));
}
public function typesAddAction(Request $request)
{
$newType = new Type();
$form = $this->createFormBuilder($newType)
->add('typeName', 'text')
->add('description', 'text')
->add('starterPath', 'text')
->getForm();
if ($request->getMethod() == 'POST')
{
$form->bind($request);
if ($form->isValid())
{
$em = $this->getDoctrine()->getManager();
$em->persist($newType);
$em->flush();
return $this->redirect($this->generateUrl('root_types'));
}
else
{
$em = $this->getDoctrine()->getManager();
$types = $em->getRepository('CsmBundle:Type')->findAll();
return $this->render('CsmBundle:Root:types.html.twig', array(
'types' => $types,
'form' => $form->createView()
));
}
}
}
types.html.twig:
...
<form class="well" action="{{ path('root_types_add') }}" method="post" {{ form_enctype(form) }}>
<fieldset>
<legend>Adding New Type</legend>
<table border="0">
<tr>
<td width="100" align="left"><strong>Type name:</strong></td><td>{{ form_widget(form.typeName, { 'attr': {'class': 'txt'} }) }}</td>
</tr>
<tr>
<td align="left"><strong>Description:</strong></td><td>{{ form_widget(form.description, { 'attr': {'class': 'txt'} }) }}</td>
</tr>
<tr>
<td align="left"><strong>Starter:</strong></td><td>{{ form_widget(form.starterPath, { 'attr': {'class': 'txt'} }) }}</td>
</tr>
<tr>
<td colspan="2">{{ form_errors(form) }}</td>
</tr>
<tr>
<td colspan="2">{{ form_rest(form) }}</td>
</tr>
<tr>
<td colspan="2" align="right"><button style="" class="btn btn-large btn-success" value="add" name="add">Add!</button></td>
</tr>
</table>
</fieldset>
</form>
...
Problem there: got error only for first field (typeName).
If i input incorrect data to all fields from HTML form, i got only(!) one error for first field (typeName).
If i input incorrect data to second (description) and third (starterPath) fields - i have no error.
Please use {{ form_row(form.name) }} instead of {{ form_widget(form.name) inside your templates to resolve the issue....
form_widget only renders the field's html while form_row renders the combination of form_label, form_widget and form_errors.
Have a look at the documentation here.
If your form bubbles up the errors as global errors try setting error_bubbling to false ( defaults to true ) inside your form's default options like this:
$this->createFormBuilder($entity, array(
'error_bubbling' => false,
'data_class' => 'Vendor\MyBundle\Entity\Name',
// ... more options
)
)