Distintas formas de borrar cache de Drupal 8

Si queremos borrar la cache en un Drupal, lo normal es entrar en el administrador y en la ruta http://MI_WEB/admin/config/development/performance darle al botón «Clear all caches» pero si lo que tenemos es un error que no nos permite cargar ninguna página, tenemos varias opciones para hacerlo «a pelo».

La que suelo usar es ejecutar el fichero http://MI_WEB/update.php pero si no estabas logado como administrador antes de que te fallara la web, no tendras acceso a su ejecución. Para permitir la ejecución sin tener que estar logado debemos editar en el fichero \sites\MI_WEB\settings.php y en el parámetro update_free_access :

$settings['update_free_access'] = FALSE;

Luego podremos accede a http://MI_WEB/update.php y volver a dejar el fichero settings.php como estaba para restablecer la seguridad.

La otra opción que es más bruta es vaciar las tablas que se encargan de almacenar el cache de la web:

TRUNCATE cache_config;
TRUNCATE cache_container;
TRUNCATE cache_data;
TRUNCATE cache_default;
TRUNCATE cache_discovery;
TRUNCATE cache_dynamic_page_cache;
TRUNCATE cache_entity;
TRUNCATE cache_menu;
TRUNCATE cache_render;
TRUNCATE cache_toolbar;

Validación en Laravel 5 según el método de recepción de los parámetros

Es habitual que al validar un formulario de usuarios por ejemplo, de cara al alta y a la modificación de un registro, comprobemos que no se puedan insertar emails duplicados en la base de datos. Si usamos los métodos estándar que usa Laravel para el alta y modificación sabremos que los datos nos llegan por POST cuando es un nuevo registro, y por PUT cuando es una modificación. Para ello en el request que usemos para validar los datos (en mi caso app\Http\Request\AdminUserRequest.php) pondremos las reglas de la siguiente forma:

public function rules()
{
	switch($this->method())
	{
		case 'POST': 
		{
/* es el alta de un usuario por lo que el email debe ser único y la contraseña obligatoria */
			return [
				'name' => 'required|max:255',
				'email' => 'required|email|max:255|unique:users',
				'password' => 'required|confirmed|contrasena_segura',
				'role'	=> 'required|in:superadmin,admin,user'
			];
		}
		case 'PUT':
		{
/* es la modificación de un registro por lo que el email debe ser unico sin contarse a si mismo, 
y la contraseña no es obligatoria ya que si no existe el parámetro, no la vamos a modificar */
			return [
				'name' => 'required|max:255',
				'email' => 'required|email|max:255|unique:users,email,'.$this->usuario,
				'password' => 'confirmed|contrasena_segura',
				'role'	=> 'required|in:superadmin,admin,user'
			];
		}
		default: return [];
	}
}

Crear función de validación propia en Laravel 5

Laravel 5 viene con un fantástico sistema de validación de datos con un montón de reglas de validación predefinidas que podemos ver en https://laravel.com/docs/5.0/validation#available-validation-rules pero lo normal es que necesitemos crear nuestras propias reglas de validación para ciertos campos. En mi caso surgió la necesidad de validar que las contraseñas cumplieran ciertas reglas (que tengan al menos una mayúscula, minúscula, número y una longitud entre 6 y 10 caracteres). Para ello en el fichero app\Providers\AppServiceProvaider.php, dentro de la función boot me cree una extensión del validador de la siguiente forma:

namespace MiProyecto\Providers;
use Illuminate\Support\ServiceProvider;

use Validator; // añadir esta línea, importante

class AppServiceProvider extends ServiceProvider {
	/**
	 * Bootstrap any application services.
	 *
	 * @return void
	 */
	public function boot()
	{
		// la validación que queremos crear
		Validator::extend('contrasena_segura', function($attribute, $value, $parameters, $validator) {
			return (preg_match('/(?!^[0-9]*$)(?!^[a-zA-Z]*$)^([a-zA-Z0-9\s]{6,10})$/', $value) == 1)?true:false;
		});
	}

	

Luego tenemos que definir el mensaje de error que se va a mostrar en caso de error, lo cual podremos hacer en el fichero validation.php del idioma que estemos usando (resources\lang\es\validation.php en mi caso):

  'contrasena_segura'  => 'La contraseña debe tener entre 6 y 10 caracteres, y contener alguna mayúscula, minúscula y número',

Y ya lo podremos usar como cualquier otro tipo de validación:

$validator = Validator::make($request->input(), [
	'name' => 'required|max:255',
	'email' => 'required|email|max:255|unique:users,email,'.$request->input('id'),
	'password' => 'required|contrasena_segura',
	'role'	=> 'required|in:superadmin,admin,user'
]);