Drupal 8 ha llegado con un montón de novedades. Tras poner en producción mi primer proyecto en Drupal 8, presento algunas de las cosas que he aprendido durante el desarrollo y que me han hecho perder tiempo.
Hablo de Render API, Form API, Dependency injection, CMI y algunas otras cosillas de introducción.
Las diapositivas están repletas de código de ejemplo de cada cosa.
Charla impartida en las oficinas de Idealista para el grupo Drupal Madrid en Marzo de 2016.
23. Forms
public function validateForm(array &$form,
FormStateInterface $form_state) {
$values = $form_state->getValues();
if(!Drupal::service('email.validator')-
>isValid($values['mail'])) {
$form_state->setErrorByName('mail', $this-
>t('The email address %mail is not valid.',
array('%mail' => $values['mail'])));
}
}
example_dyb_landing/src/Form/ContactForm.php
24. Forms
public function submitForm(array &$form, FormStateInterface
$form_state) {
$values = $form_state->getValues();
$to = Drupal::config('system.site')->get('mail');
$language_interface = Drupal::languageManager()-
>getCurrentLanguage();
Drupal::service('plugin.manager.mail')-
>mail('example_dyb_landing', 'contact_message', $to,
$language_interface, $values, 'no-replyđ@mail.com');
drupal_set_message($this->t('Thank for contact us. Your
message has been sent correctly.'));
}
example_dyb_landing/src/Form/ContactForm.php
32. Inyección de dependencias
namespace Drupalregister_formForm;
use Drupalrest_clientRestClient;
class RegisterForm extends FormBase{
protected $client;
public function __construct(RestClient $client) {
$this->client = $client;
}
public static function create(ContainerInterface $container) {
return new static(
$container->get('rest_client.client'),
);
}
example_dyb_landing/src/Form/RegisterForm.php
36. name: public
type: theme
description: Public theme.
package: Other
core: 8.x
libraries:
- public/global-styling
base theme: classy
regions:
content: Content
header: Header
footer: Footer
public/public.info.yml
Mi primer theme