Causa Framework Preview - Mini framework para low cost hostings que no tienen soporte para Laravel

  • Autor Autor WPE
  • Fecha de inicio Fecha de inicio
WPE

WPE

Beta
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Aquí Guille de WPE:

Vengo hoy a presentarles el video preview de un framework que hemos desarrollado y usamos en Web+apps Para Emprendedores en hostings que siendo low cost no te permiten instalar Laravel.

El vídeo ya está en YT:

El framework lo desarrolló originalmente Oscar, nuestro CTO experto en PHP. Puedes usar Composer, Tailwind, HTMX, Vite y un montón de cosas más que te hacen la vida más simple como programador y como dice Oscar: "la idea es incrementar tu productividad usando los patterns a los que ya estás acostubrado".

Esperamos darle los ajustes finales al proyecto y publicarlo en GitHub para fines de mes. Y ya saben, si tienen proyectos que requieran de programadores que dominen pueden visitarnos en:

https://wpe.net.pe

Telegram/WhatsApp: +51 970 196 659
 
Ya lo puedes usar:

https://github.com/CausaWeb/CausaFramework

un framework pensado para desarrollar aplicaciones modernas al estilo de Laravel pero en hostings baratos/low cost, donde no puedes instalar Laravel o no puedes hacer deployments de Node.

Ya conocen el preview en YT:



y seguramente vamos a preparar otros vídeo-tuts para ver cuán fácil se programa con Causa Framework!

https://wpe.net.pe

Telegram/WhatsApp: +51 970 196 659
 
Hola, gracias a Guille de WPE por anunciar el lanzamiento del repo.

Ayer preparé un video tut que demuestra lo sencillo que es comenzar con Causa Framework:



lo comencé hace algunos meses cuando tuve que trabajar sobre un proyecto hecho en PHP puro corriendo en un típico hosting baratito, y el source original daba pena por lo mal hecho que estaba, así que lo primero que hice fue darle soporte para Blade, algo que lo haces en menos de 5 minutos, lo interesante es que ese proyecto necesitaba urgentemente un routing system y así comenzó todo. Un tiempo después el mismo cliente pidió mejorar otro sitio 'parecido' y una cosa llevó a otra.

Ya saben dónde encontrar el repo:

https://github.com/CausaWeb/CausaFramework

si estás familiarizado con Laravel o mejor aún con Livewire te va a ser muy sencillo hacer cosas complejas. Yo sugiero que revises HTMX es cool, y nunca hace daño aprender cosas nuevas; si ya conoces HTMX vas a poder customizarlo a la medida de tus necesidades.

Espero que Causa Framework les sea de utilidad.
 
Hola, ya está listo el video tutorial para interactuar con datos:



remarcar que CausaFramework ha sido creado no solo para correr en hosting con capacidades limitadas (no Laravel, no Node) sino que además su approach es trabajar como 'microservices app' por lo que consumes APIs para interactuar con data externa 😎.
 
Nuevo tut sobre como puedes conectar CausaFramework con Supabase. Más sencillo no podría ser 😄:



Queda pendiente otro sobre cómo conectar Causa a MongoDB. Tengo que irme y "as usual" no tengo time para ver otros temas en el foro, pero sería interesante si hubiese aquí algún thread sobre React2Shell y el escándalo de la vulnerabilidad de React/Nextjs (el repo en GitHub: https://github.com/msanft/CVE-2025-55182) que evidencia la facilidad con que se pueden vulnerar algunas funcionalidades de uno de los ecosistemas + populares en el mundo da mucho en qué pensar.

En https://wpe.net.pe hemos "parchando" al momento +15 sitios, websites de clientes de agencias SEO y Marketing con las que trabajamos. Sin embargo parece que en esta parte del mundo poco o nada se dice al respecto. Si no sabes aún lo que pasa, puse un artículos en Linkedin que pueden consultar:

https://www.linkedin.com/pulse/cve-2025-55182-vulnerabilidad-cr%C3%ADtica-en-react-y-wpe-k75xe
 
  • Me gusta
Reacciones: WPE
Hola de nuevo, vine a compartirles el link del último video sobre CausaFramework que publiqué anoche en YT:



trata sobre cómo conectar Causa con MongoDB, que es super sencillo, y el mérito no es precisamente de Causa gran parte de eso se debe a PHP, Composer y una apropiada estructura de directorios; lo único que hace Causa es aplicar una lógica que ya ha sido comprobada en otros frameworks como Laravel y la aplica a "pure PHP projects". Cuando trabajas para agencias grandes y se presenta un proyecto PHP, la discusión trata sobre qué resources del ecosistema Laravel se usará: Livewire, Inertia, Nova, Sail, etc. En cambio en muchos países de Latino América dices. "tu hosting soporta Laravel?" y en muchos casos la respuesta es NO así que Causa nace en escenarios donde me decía: "quiero usar Blade, pues me hace la vida más fácil pero le agrega valor y eficiencia al proyecto".

En ese sentido luego vino: "debo usar Composer pues necesito determinada librería", "esta tarea es muy repetitiva, necesito un comando CLI para esto", "quiero usar live reload", "quiero usar Tailwind", etc. Laravel o Symfony son open source frameworks así que puedes "customizarlo" pero cuántos de nosotros estamos en capacidad de hacerlo apropiadamente? Pero Causa es tan sencillo, tiene tan pocos elementos que modificarlo es cosa de unos cuantos minutos.

estoy de vacaciones pero igual, me quito 😄.

PS: Roxana, una estudiante de la UNCP me escribió preguntándome si cuando se usa una clase endpoint podría evitarse definir la variable:
protected static string $endpoint
y si esa variable sería el equivalente de:
protected $table
la respuesta es sí, es además una aguda observación. Su otra pregunta era: "podría asignarse el nombre automáticamente?" y también la respuesta es SÍ. Para hacer eso usas puro PHP, en este caso
\ReflectionClass
ejem: ReflectionClass('App\Api\Endpoints\Products') que devuelve información sobre la clase como el nombre: 'Products'. La DB tradicionales usan convenciones como nombres de las tablas en minúsculas, nombres compuestos separados por '_' ejem: 'user_contacts' (la clase debería llamarse UserContacts) etc.

Aquí les comparto una clase que otras classes model extienden -es parte de una app que tengo en mi localhost dash, así que tiene algunos años pero es funcional-:


namespace OscarAlderete\Models\Mongodb;

use Doctrine\Inflector\InflectorFactory;
use Exception;
use MongoDB\Client;
use MongoDB\Collection;

class Model
{
private static ?Client $client = null;

protected $db;
protected Collection $collection;

public function __construct()
{
if (self::$client === null) {
try {
self::$client = new Client(sprintf(MONGODB_REMOTE_CLIENT, MONGODB_USER, urlencode(MONGODB_PASSWORD)));
} catch (Exception $e) {
self::$client = null;
}
}

if (self::$client) {
$this->db = self::$client->selectDatabase(MONGODB_DBNAME);
$this->collection = $this->db->selectCollection($this->resolveCollectionName());
}
}

public function find(array $filter = [], array $options = []): array
{
if ($this->collection) {
return $this->collection->find($filter, $options)->toArray();
}

return [];
}

public function insert(array $data): array
{
if (empty($data)) {
throw new \InvalidArgumentException("Insert data cannot be empty.");
}

$result = $this->collection->insertOne($data);

return [
'insertedId' => $result->getInsertedId(),
];
}




// privates
private function resolveCollectionName(): string
{
$className = (new \ReflectionClass($this))->getShortName();

// Convert camel case to snake case first
$snakeCaseName = strtolower(preg_replace('/([a-z])([A-Z])/', '$1_$2', $className));

// Use Doctrine Inflector to pluralize correctly
$inflector = InflectorFactory::create()->build();
return strtolower($inflector->pluralize($snakeCaseName));
}
}
 
Atrás
Arriba