PHP code example of laton / framework

1. Go to this page and download the library: Download laton/framework library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

laton / framework example snippets


namespace App\Controller;

use Mbrianp\FuncCollection\Logic\AbstractController;
use Mbrianp\FuncCollection\Routing\Routing;
use Mbrianp\FuncCollection\Http\{Response, Request};
use Mbrianp\FuncCollection\Routing\Attribute\Route;

class ControllerName extends AbstractController
{
    #[Route('/', name: 'index')]
    public function method(): Response
    {
        // La vista se buscara en la carpeta que se defina en el .ini
        return $this->render('vista.php', ['param1' => 'hola']);
    }
    
    /**
     * Puedes injectar los parametros de la URL al metodo
     * Es obligartorio tiparlo como string y ponerle al parametro 
     * el mismo nombre del parametro de la ruta
     * 
     * Tambien por ejemplo puede injectar un objeto Request
     * para obtener lo enviado por POST o GET, etc 
     * 
     * O un objeto routing para generar rutas
     * 
     * No importa el orden de los parametros, puedes alternarlos como quieras 
     */
    #[Route('/{parametro}', name: 'index_con_parametro')]
    public function metodo2(string $parametro, Request $request, Routing $routing): Response
    {
        // Response here
    }
    
    /**
     * Si se indica una expresion regular dentro de <> en el parametro de la ruta
     * significa que ese parametro debe cumplir con la expresion regular para que la ruta se active
     * si no cumple se dara un error 404
     */
    #[Route('/{nick<@\w+>}', name: 'profile')]
    public function rutaFiltrada(string $nick): Response
    {
    
    }
}

 use Mbrianp\FuncCollection\View\ViewHelper; 


namespace App\Entity;

use Mbrianp\FuncCollection\ORM\Attributes\Column;
use Mbrianp\FuncCollection\ORM\Attributes\FilledValue;
use Mbrianp\FuncCollection\ORM\Attributes\Id;

class User
{
    #[Id]
    #[Column]    
    public ?int $id = null;

    #[Column]
    public string $name;
    
    #[Column]
    public string $lastname;
    
    #[FilledValue(['name', 'lastname'])]
    #[Column]
    public string $fullname;
    
    #[Column(unique: true)]
    public string $email;
    
    #[Column]
    public string $password;
    
    #[Column(type: 'json')]
    public array $roles;
}


namespace App\Controller;

use App\Entity\User;
use Mbrianp\FuncCollection\Http\Response;
use Mbrianp\FuncCollection\ORM\ORM;
use Mbrianp\FuncCollection\ORM\SchemaGenerator;

class Controller
{
    // Aqui se configura la ruta con #[Route]
    public function createDatabase(ORM $orm, SchemaGenerator $schemaGenerator): Response
    {
        $schemaGenerator->createEntityTable(User::class);
        
        // Lo mismo de arriba
        //$orm->getSchemaGenerator()->createEntityTable(User::class);
        
        return new Response('Content');
    }
}


namespace App\Controller;

use App\Entity\User;

class AppController
{
    public function register(EntityManager $manager): Response
    {
        $user = new User();
        
        $user->name = 'Name';
        $user->lastname = 'Lastname';
        $user->email = '[email protected]';
        $user->password = 'password';
        
        // Insertar
        $manager->persist($user);
        
        // Response here.
    }
}



namespace App\Entity;

use App\Repository\UserRepository;
use Mbrianp\FuncCollection\ORM\Attributes\Repository;

#[Repository(UserRepository::class)]
class User
{
    // El mismo contenido de antes
}


namespace App\Repository;

use App\Entity\User;
use Mbrianp\FuncCollection\ORM\AbstractRepository;

class UserRepository extends AbstractRepository
{
    public static function getRefEntity(): string
    {
        return User::class;
    }
}



namespace App\Controller;

use App\Entity\User;
use App\Repository\UserRepository;
use Mbrianp\FuncCollection\Http\Response;
use Mbrianp\FuncCollection\ORM\EntityManager;
use Mbrianp\FuncCollection\Routing\Attribute\Route;

class AppController
{
    // Aqui va la ruta
    public function index(EntityManager $manager, UserRepository $repository): Response
    {
        // Lo mismo que injectar UserRepository 
        $repository = $manager->getRepository(User::class);
        
        // Metodos
        // Encontrar por el ID
        $repository->find(1);
        
        // Todos los registros de la base de datos
        $repository->findAll();
        
        // Filtrar la busqueda
        $repository->findBy(['country' => 'Cuba']);
        
        // Filtrar la busqueda pero con un solo resultado
        $user = $repository->findOneBy(['country' => 'Cuba']);
        
        // Cambiar de valor la propiedad que se quiere actualizar
        // Todas las demas propiedades tendran de valor el resultado de
        // la base de datos con el metodo findOneBy
        $user->country = 'Italy';
        
        // Va a actualizar dado que el Id esta definido
        // Si el Id no esta definido pues insertara el registro
        // Tambien puedes actualizar un registro sin buscarlo en la base de datos
        // Solamente crear el objeto y asegurar que el ID sea del registro que se va a actualizar
        $manager->persist($user);
        
        // Para eliminar
        $manager->remove($user);
        
        // Response here
    }
    
    /**
     * Otra forma de hacer consultas es exigiendo la entidad como parametro
     * Esto funcionara siempre y cuando en la ruta haya un parametro que coincida con una propiedad (que sea columna) en la entidad
     * Por ej, aqui, en la ruta, hay parametro, id por lo tanto se va a buscar un usuario con el id que se pase en la URL
     *
     * El parametro es obligado tiparlo para asi saber en que tabla buscar
     * y tambien debe aceptar null como valor en case de que no se encuentre ningun resultado 
     */
    #[Route('/profile/{id<\d+>}', name: 'profile')]
    public function profile(?User $user): Response
    {
        return new Response(\var_export($user, true));
    }
}