Archivos de Categoría: PHP

Configuraciones de Docker que suelo usar

Casi siempre he estado trabajando con VMware pero llevo ya un tiempo usando Docker que resulta bastante más rápido de montar una máquina con las versiones de software que luego tenemos en producción.

Por ahora solo los tengo para PHP y MySQL, pero estoy viendo opciones para ColdFusion y SQL Server, cuando los tenga los publicare junto con estas configuraciones en mi GitHub

Ver mis configuraciones tipo de Docker

Cambiar nombres de tablas por defecto

En un proyecto que estoy montando tengo que usar una base de datos donde ya hay tablas por lo que he decidido ponerles a todas las tablas del proyecto en prefijo bk_ para poder tenerlas organizadas. El problema está en las tablas que genera Laravel por defecto, así que toca cambiar un poco la configuración para que use las nuevas.
Lo primero es en las migraciones, eso es sencillo, simplemente modificar los nombres en los ficheros de creación de la tabla users, password_reset y notifications. Despues podemos correr las migraciones para que cree las nuevas tablas.
Después vamos a cambiar los ficheros donde aparece la referencia a la tabla users y cambiarlo por bk_users:

App/Http/Controllers/Auth/RegisterController.php:

  'email' => ['required', 'string', 'email', 'max:255', 'unique:bk_users'],

App/User.php:

 protected $table = 'bk_users';

La referencia a la tabla passwords_reset está en el fichero config/auth.php:

'passwords' => [
        'users' => [
            'provider' => 'users',
            'table' => 'bk_password_resets',
            'expire' => 60,
        ],
    ],

Por ultimo las notificaciones, que es un pelín más enrevesado. Lo primero es crear un nuevo modelo que será el que relacionaremos luego con los usuarios:

php artisan make:model DatabaseUserNotification

Y el modelo quedaría de la siguiente forma:

namespace App;
use Illuminate\Notifications\DatabaseNotification;
class DatabaseUserNotification extends DatabaseNotification 
{
     protected $table = 'bk_notifications';
}

Luego en el modelo User vamos a sobreescribir las notificaciones para que tiren de este nuevo modelo:

public function notifications()
    {
        return $this->morphMany(DatabaseUserNotification::class, 'notifiable')->orderBy('created_at', 'desc');
    }

Laravel funcionando desde la raíz del proyecto

Tengo que subir un proyecto a un servidor «raro» que no me
permite tocar nada de la configuración, por lo que no puedo especificar que tire
de la carpeta public. Es algo más inseguro pero la única opción que he visto es
hacer que tire de la raíz del proyecto.  Para ello he seguido los siguientes pasos:

Renombrar /server.php como index.php y cambiar el código

require_once __DIR__ . '/public/index.php';

por

require_once __DIR__ . '/public/server.php';

Crear un fichero .htaccess en el raíz con el código:


<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -Indexes
</IfModule>
<FilesMatch "\.(json|xml|lock|env|example|gitattributes|gitignore)$">
Order allow,deny
Deny from all
</FilesMatch>
<Files artisan>
Order allow,deny
Deny from all
</Files>
RewriteEngine On
# Redirect Trailing Slashes If Not A Folder...
RewriteRule ^(.*)/$ /$1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
</IfModule>

Borrar el fichero  /public/.htaccess
Renombrar el fichero /public/index.php por /public/server.php

Logicamente hay que evitar subir los fichero composer, webpack, etc y cuando queramos hacer referencia a un asset la nueva ruta será con public, por ejemplo «{{ asset(‘public/js/app.js’) }}»