feat: release SysMVC 2.0 with enhanced CSRF protection and UI improvements
Major version upgrade from 1.0.0 to 2.0.0 including copyright year updates, website URL migration to syspanel.com.br, and comprehensive CSRF token handling improvements. The Twig csrf() helper now returns a complete hidden input field instead of a raw token value, and token generation is now automatic when empty. Session initialization has been centralized in BaseController, and child controllers now properly call parent constructors. CRUD views have been modernized with flexbox layouts and consistent CSRF rendering. Documentation has been expanded with features, requirements, and project structure sections, and donation sections have been added across all pages.
This commit is contained in:
@@ -0,0 +1,52 @@
|
||||
<?php $_shouldextend[1]=1; ?>
|
||||
|
||||
<?php $this->startSection('title', 'Crud Example Create'); ?>
|
||||
|
||||
<?php $this->startSection('content'); ?>
|
||||
<div class="container mt-5">
|
||||
<h1 class="text-success">Blade - Crud Example New Item</h1>
|
||||
|
||||
<!-- Display error message if any -->
|
||||
<?php if($error): ?>
|
||||
<div class="alert alert-danger">
|
||||
<?php echo \htmlentities($error??'', ENT_QUOTES, 'UTF-8', false); ?>
|
||||
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<form action="/crudexample" method="POST">
|
||||
<?= csrf() ?>
|
||||
<div class="mb-3">
|
||||
<label for="name" class="form-label">Name:</label>
|
||||
<input type="text" id="name" name="name" class="form-control" required>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label for="password" class="form-label">Password:</label>
|
||||
<input type="password" id="password" name="password" class="form-control" required>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label for="company" class="form-label">Company:</label>
|
||||
<input type="text" id="company" name="company" class="form-control">
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label for="address" class="form-label">Address:</label>
|
||||
<input type="text" id="address" name="address" class="form-control">
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label for="phone" class="form-label">Phone:</label>
|
||||
<input type="text" id="phone" name="phone" class="form-control">
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label for="email" class="form-label">Email:</label>
|
||||
<input type="email" id="email" name="email" class="form-control" required>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label for="notes" class="form-label">Notes:</label>
|
||||
<textarea id="notes" name="notes" class="form-control"></textarea>
|
||||
</div>
|
||||
<button type="submit" class="btn btn-primary">Create</button>
|
||||
</form>
|
||||
</div>
|
||||
<?php $this->stopSection(); ?>
|
||||
|
||||
<?php if (isset($_shouldextend[1])) { echo $this->runChild('layout'); } ?>
|
||||
@@ -0,0 +1,47 @@
|
||||
<?php $_shouldextend[1]=1; ?>
|
||||
|
||||
<?php $this->startSection('title', 'Crud Example List'); ?>
|
||||
|
||||
<?php $this->startSection('content'); ?>
|
||||
<div class="container mt-5">
|
||||
<div class="d-flex justify-content-between align-items-center mb-4">
|
||||
<h1 class="display-4 text-primary">Blade - Crud Example List</h1>
|
||||
<a href="/crudexample/create" class="btn btn-success btn-lg">Add New Item</a>
|
||||
</div>
|
||||
<div class="table-responsive">
|
||||
<table class="table table-striped table-hover">
|
||||
<thead class="table-dark">
|
||||
<tr>
|
||||
<th>ID</th>
|
||||
<th>Name</th>
|
||||
<th>Company</th>
|
||||
<th>Actions</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php $__currentLoopData = $crudexample; $this->addLoop($__currentLoopData);$this->getFirstLoop();
|
||||
foreach($__currentLoopData as $item): $loop = $this->incrementLoopIndices(); ?>
|
||||
<tr>
|
||||
<td><?php echo \htmlentities($item['id']??'', ENT_QUOTES, 'UTF-8', false); ?></td>
|
||||
<td><?php echo \htmlentities($item['name']??'', ENT_QUOTES, 'UTF-8', false); ?></td>
|
||||
<td><?php echo \htmlentities($item['company']??'', ENT_QUOTES, 'UTF-8', false); ?></td>
|
||||
<td>
|
||||
<div class="d-flex">
|
||||
<a href="/crudexample/show/<?php echo \htmlentities($item['id']??'', ENT_QUOTES, 'UTF-8', false); ?>" class="btn btn-info btn-sm mr-1">View</a>
|
||||
<a href="/crudexample/edit/<?php echo \htmlentities($item['id']??'', ENT_QUOTES, 'UTF-8', false); ?>" class="btn btn-warning btn-sm mr-1">Edit</a>
|
||||
<form action="/crudexample/delete/<?php echo \htmlentities($item['id']??'', ENT_QUOTES, 'UTF-8', false); ?>" method="POST" class="d-inline">
|
||||
<?php echo \htmlentities(csrf()??'', ENT_QUOTES, 'UTF-8', false); ?>
|
||||
|
||||
<button type="submit" class="btn btn-danger btn-sm" onclick="return confirm('Are you sure?')">Delete</button>
|
||||
</form>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endforeach; $this->popLoop(); $loop = $this->getFirstLoop(); ?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<?php $this->stopSection(); ?>
|
||||
|
||||
<?php if (isset($_shouldextend[1])) { echo $this->runChild('layout'); } ?>
|
||||
@@ -0,0 +1,51 @@
|
||||
<?php $_shouldextend[1]=1; ?>
|
||||
|
||||
<?php $this->startSection('title', 'Crud Example Show'); ?>
|
||||
|
||||
<?php $this->startSection('content'); ?>
|
||||
<div class="container mt-5">
|
||||
<h1 class="text-info">Blade - Crud Example Show</h1>
|
||||
<table class="table table-bordered table-striped">
|
||||
<tr>
|
||||
<th>ID</th>
|
||||
<td><?php echo \htmlentities($crudexample['id']??'', ENT_QUOTES, 'UTF-8', false); ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
<td><?php echo \htmlentities($crudexample['name']??'', ENT_QUOTES, 'UTF-8', false); ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Company</th>
|
||||
<td><?php echo \htmlentities($crudexample['company']??'', ENT_QUOTES, 'UTF-8', false); ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Address</th>
|
||||
<td><?php echo \htmlentities($crudexample['address']??'', ENT_QUOTES, 'UTF-8', false); ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Phone</th>
|
||||
<td><?php echo \htmlentities($crudexample['phone']??'', ENT_QUOTES, 'UTF-8', false); ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Email</th>
|
||||
<td><?php echo \htmlentities($crudexample['email']??'', ENT_QUOTES, 'UTF-8', false); ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Notes</th>
|
||||
<td><?php echo \htmlentities($crudexample['notes']??'', ENT_QUOTES, 'UTF-8', false); ?></td>
|
||||
</tr>
|
||||
</table>
|
||||
<a href="/crudexample/edit/<?php echo \htmlentities($crudexample['id']??'', ENT_QUOTES, 'UTF-8', false); ?>" class="btn btn-warning me-2">Edit</a>
|
||||
|
||||
<!-- Delete form -->
|
||||
<form action="/crudexample/delete/<?php echo \htmlentities($crudexample['id']??'', ENT_QUOTES, 'UTF-8', false); ?>" method="POST" class="d-inline">
|
||||
<?php echo \htmlentities(csrf()??'', ENT_QUOTES, 'UTF-8', false); ?>
|
||||
|
||||
<button type="submit" class="btn btn-danger me-2" onclick="return confirm('Are you sure?')">Delete</button>
|
||||
</form>
|
||||
|
||||
<a href="/crudexample" class="btn btn-secondary">Back to List</a>
|
||||
</div>
|
||||
<?php $this->stopSection(); ?>
|
||||
|
||||
<?php if (isset($_shouldextend[1])) { echo $this->runChild('layout'); } ?>
|
||||
@@ -0,0 +1,30 @@
|
||||
<?php $_shouldextend[1]=1; ?>
|
||||
|
||||
<?php $this->startSection('title', 'About'); ?>
|
||||
|
||||
<?php $this->startSection('content'); ?>
|
||||
<div class="container mt-5">
|
||||
<h1 class="display-4 text-primary">About Us</h1>
|
||||
<p class="lead">Welcome to SysMVC - PHP Framework!</p>
|
||||
<p>SysMVC is a PHP framework developed to simplify the creation of robust and scalable web applications. We use the best development practices and modern tools to provide an efficient and enjoyable development experience.</p>
|
||||
<p>Our mission is to help developers build high-quality web applications quickly and effectively. We offer a solid and flexible framework, allowing you to focus on what really matters: creating amazing features for your users.</p>
|
||||
<p>If you have any questions or need support, feel free to contact us. We are here to help!</p>
|
||||
<p><strong>Marco Costa</strong></p>
|
||||
<p>Developer and Creator of SysMVC</p>
|
||||
<p>Official website: <a href="https://sysmvc.syspanel.com.br">sysmvc.syspanel.com.br</a><p>
|
||||
<p>Contact email: <a href="mailto:syspanel@gmx.com">syspanel@gmx.com</a><p>
|
||||
<p>Github: <a href="https://github.com/syspanel/SysMVC.git" target="_blank">https://github.com/syspanel/SysMVC.git</a></p>
|
||||
|
||||
<hr class="my-5">
|
||||
|
||||
<h2 class="mt-4">🙎 Support the Project</h2>
|
||||
<p>If you find this project useful, consider supporting its development with a donation via PayPal:</p>
|
||||
<p>
|
||||
<a href="https://www.paypal.com/donate/?business=marcocosta@gmx.com¤cy_code=USD" target="_blank">
|
||||
<img src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif" alt="Donate via PayPal">
|
||||
</a>
|
||||
</p>
|
||||
</div>
|
||||
<?php $this->stopSection(); ?>
|
||||
|
||||
<?php if (isset($_shouldextend[1])) { echo $this->runChild('layout'); } ?>
|
||||
@@ -0,0 +1,55 @@
|
||||
<?php $_shouldextend[1]=1; ?>
|
||||
|
||||
<?php $this->startSection('title', 'App Development with SysMVC'); ?>
|
||||
|
||||
<?php $this->startSection('content'); ?>
|
||||
<div class="container mt-5">
|
||||
<h1 class="display-4 text-primary">App Development with SysMVC</h1>
|
||||
<p class="lead">How to use SysMVC as a base for application development.</p>
|
||||
|
||||
<p>SysMVC is a flexible and powerful framework, perfect for serving as the foundation for developing modern web applications.</p>
|
||||
|
||||
<h2>Modular Structure</h2>
|
||||
<p>SysMVC allows you to create independent modules, making it easier to organize your code and maintain the project.</p>
|
||||
|
||||
<h2>Simple Routing</h2>
|
||||
<p>With SysMVC's router, you can define your routes in a simple and intuitive way:</p>
|
||||
<pre><code>
|
||||
Router::get('/home', 'HomeController@index');
|
||||
Router::post('/client', 'ClientController@store');
|
||||
</code></pre>
|
||||
|
||||
<h2>Template Rendering</h2>
|
||||
<p>Use BladeOne to efficiently and neatly render your templates:</p>
|
||||
<pre><code>
|
||||
echo $blade->run("home.index", ["clients" => $clients]);
|
||||
</code></pre>
|
||||
|
||||
<p>With these tools, SysMVC provides a solid foundation for developing robust and scalable web applications.</p>
|
||||
|
||||
<br><br>
|
||||
|
||||
<p>Github: <a href="https://github.com/syspanel/SysMVC.git">https://github.com/syspanel/SysMVC.git</a></p>
|
||||
|
||||
<br><br>
|
||||
|
||||
<h2 class="mt-4">Contact</h2>
|
||||
<p>If you're interested in SysMVC, get in touch:</p>
|
||||
<ul>
|
||||
<li>Email: <a href="mailto:syspanel@gmx.com">syspanel@gmx.com</a></li>
|
||||
<li>WhatsApp: <a href="https://wa.me/5535992261684" target="_blank">+55 (35) 99226-1684</a></li>
|
||||
</ul>
|
||||
|
||||
<hr class="my-5">
|
||||
|
||||
<h2 class="mt-4">🙎 Support the Project</h2>
|
||||
<p>If you find this project useful, consider supporting its development with a donation via PayPal:</p>
|
||||
<p>
|
||||
<a href="https://www.paypal.com/donate/?business=marcocosta@gmx.com¤cy_code=USD" target="_blank">
|
||||
<img src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif" alt="Donate via PayPal">
|
||||
</a>
|
||||
</p>
|
||||
</div>
|
||||
<?php $this->stopSection(); ?>
|
||||
|
||||
<?php if (isset($_shouldextend[1])) { echo $this->runChild('layout'); } ?>
|
||||
@@ -0,0 +1,93 @@
|
||||
<?php $_shouldextend[1]=1; ?>
|
||||
|
||||
<?php $this->startSection('title', 'Console CLI'); ?>
|
||||
|
||||
<?php $this->startSection('content'); ?>
|
||||
<div class="container">
|
||||
<h2>Console CLI</h2>
|
||||
<p>The SysMVC CLI console, based on Symfony Console, allows you to efficiently manage your project using command-line commands.</p>
|
||||
|
||||
<h3>Useful Commands</h3>
|
||||
<ul>
|
||||
<li><strong>php bin/console generate:app-key</strong> - Generates a new application key.</li>
|
||||
<li><strong>php bin/console app:say-hello</strong> - Hello.</li>
|
||||
</ul>
|
||||
|
||||
<h3>Extending with More Commands</h3>
|
||||
<p>The Symfony Console allows you to create and extend custom commands. Here is an example of how to create a custom command:</p>
|
||||
<pre>
|
||||
<code>
|
||||
// src/Command/SayHelloCommand.php
|
||||
namespace App\Command;
|
||||
|
||||
use Symfony\Component\Console\Command\Command;
|
||||
use Symfony\Component\Console\Input\InputInterface;
|
||||
use Symfony\Component\Console\Output\OutputInterface;
|
||||
|
||||
class SayHelloCommand extends Command
|
||||
{
|
||||
protected static $defaultName = 'app:say-hello';
|
||||
|
||||
protected function configure()
|
||||
{
|
||||
$this
|
||||
->setDescription('Says hello.')
|
||||
->setHelp('This command allows you to say hello...');
|
||||
}
|
||||
|
||||
protected function execute(InputInterface $input, OutputInterface $output)
|
||||
{
|
||||
$output->writeln('Hello from SysMVC!');
|
||||
return Command::SUCCESS;
|
||||
}
|
||||
}
|
||||
</code>
|
||||
</pre>
|
||||
|
||||
<p>To register the command, add it to the service in the <code>config/services.yaml</code> file:</p>
|
||||
<pre>
|
||||
<code>
|
||||
# config/services.yaml
|
||||
services:
|
||||
App\Command\SayHelloCommand:
|
||||
tags: ['console.command']
|
||||
</code>
|
||||
</pre>
|
||||
|
||||
<p>Now you can execute the custom command:</p>
|
||||
<pre>
|
||||
<code>
|
||||
$ php bin/console app:say-hello
|
||||
</code>
|
||||
</pre>
|
||||
|
||||
<p>For more information about available commands and how to create custom commands, check the <a href="https://symfony.com/doc/current/console.html" target="_blank">Symfony Console documentation</a>.</p>
|
||||
</div>
|
||||
|
||||
|
||||
<br><br>
|
||||
|
||||
<p>Github: <a href="https://github.com/syspanel/SysMVC.git">https://github.com/syspanel/SysMVC.git</a></p>
|
||||
|
||||
<br><br>
|
||||
|
||||
<h2 class="mt-4">Contact</h2>
|
||||
<p>If you're interested in SysMVC, get in touch:</p>
|
||||
<ul>
|
||||
<li>Email: <a href="mailto:syspanel@gmx.com">syspanel@gmx.com</a></li>
|
||||
<li>WhatsApp: <a href="https://wa.me/5535992261684" target="_blank">+55 (35) 99226-1684</a></li>
|
||||
</ul>
|
||||
|
||||
<hr class="my-5">
|
||||
|
||||
<h2 class="mt-4">🙎 Support the Project</h2>
|
||||
<p>If you find this project useful, consider supporting its development with a donation via PayPal:</p>
|
||||
<p>
|
||||
<a href="https://www.paypal.com/donate/?business=marcocosta@gmx.com¤cy_code=USD" target="_blank">
|
||||
<img src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif" alt="Donate via PayPal">
|
||||
</a>
|
||||
</p>
|
||||
</div>
|
||||
<?php $this->stopSection(); ?>
|
||||
|
||||
<?php if (isset($_shouldextend[1])) { echo $this->runChild('layout'); } ?>
|
||||
@@ -0,0 +1,70 @@
|
||||
<?php $_shouldextend[1]=1; ?>
|
||||
|
||||
<?php $this->startSection('title', 'Database Usage'); ?>
|
||||
|
||||
<?php $this->startSection('content'); ?>
|
||||
<div class="container mt-5">
|
||||
<h1 class="display-4 text-primary">Database Usage</h1>
|
||||
<p class="lead">CRUD Example with SysMVC.</p>
|
||||
|
||||
<p>SysMVC makes it easy to interact with databases through the use of Eloquent ORM. You can easily create, read, update, and delete records in the database using intuitive methods.</p>
|
||||
|
||||
<h2>CRUD Example</h2>
|
||||
<p>Below is a basic example of CRUD operations:</p>
|
||||
|
||||
<h3>Creating a Record</h3>
|
||||
<pre><code>
|
||||
$client = new Client();
|
||||
$client->name = 'Client Name';
|
||||
$client->email = 'email@example.com';
|
||||
$client->save();
|
||||
</code></pre>
|
||||
|
||||
<h3>Reading Records</h3>
|
||||
<pre><code>
|
||||
$clients = Client::all();
|
||||
foreach ($clients as $client) {
|
||||
echo $client->name;
|
||||
}
|
||||
</code></pre>
|
||||
|
||||
<h3>Updating a Record</h3>
|
||||
<pre><code>
|
||||
$client = Client::find(1);
|
||||
$client->name = 'New Name';
|
||||
$client->save();
|
||||
</code></pre>
|
||||
|
||||
<h3>Deleting a Record</h3>
|
||||
<pre><code>
|
||||
$client = Client::find(1);
|
||||
$client->delete();
|
||||
</code></pre>
|
||||
|
||||
<p>With these examples, you can see how easy it is to work with databases using SysMVC.</p>
|
||||
<br><br>
|
||||
|
||||
<p>Github: <a href="https://github.com/syspanel/SysMVC.git">https://github.com/syspanel/SysMVC.git</a></p>
|
||||
|
||||
<br><br>
|
||||
|
||||
<h2 class="mt-4">Contact</h2>
|
||||
<p>If you're interested in SysMVC, get in touch:</p>
|
||||
<ul>
|
||||
<li>Email: <a href="mailto:syspanel@gmx.com">syspanel@gmx.com</a></li>
|
||||
<li>WhatsApp: <a href="https://wa.me/5535992261684" target="_blank">+55 (35) 99226-1684</a></li>
|
||||
</ul>
|
||||
|
||||
<hr class="my-5">
|
||||
|
||||
<h2 class="mt-4">🙎 Support the Project</h2>
|
||||
<p>If you find this project useful, consider supporting its development with a donation via PayPal:</p>
|
||||
<p>
|
||||
<a href="https://www.paypal.com/donate/?business=marcocosta@gmx.com¤cy_code=USD" target="_blank">
|
||||
<img src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif" alt="Donate via PayPal">
|
||||
</a>
|
||||
</p>
|
||||
</div>
|
||||
<?php $this->stopSection(); ?>
|
||||
|
||||
<?php if (isset($_shouldextend[1])) { echo $this->runChild('layout'); } ?>
|
||||
+66
@@ -0,0 +1,66 @@
|
||||
<?php $_shouldextend[1]=1; ?>
|
||||
|
||||
<?php $this->startSection('title', 'Dependency Injection with PHP-DI'); ?>
|
||||
|
||||
<?php $this->startSection('content'); ?>
|
||||
<div class="container mt-5">
|
||||
<h1 class="display-4 text-primary">Dependency Injection with PHP-DI</h1>
|
||||
<p class="lead">How to use PHP-DI in SysMVC.</p>
|
||||
|
||||
<p>SysMVC uses the PHP-DI library to manage dependency injection. This allows you to write more modular and testable code.</p>
|
||||
|
||||
<h2>Basic Configuration</h2>
|
||||
<p>To configure PHP-DI, you can create a <code>di-config.php</code> file with the definitions of your dependencies:</p>
|
||||
<pre><code><?php echo \htmlentities(' use DI\ContainerBuilder;
|
||||
|
||||
return function (ContainerBuilder $containerBuilder) {
|
||||
$containerBuilder->addDefinitions([
|
||||
// Define your dependencies here
|
||||
ClientRepository::class => \DI\create(MySqlClientRepository::class),
|
||||
]);
|
||||
};'??'', ENT_QUOTES, 'UTF-8', false); ?></code></pre>
|
||||
|
||||
<h2>Usage</h2>
|
||||
<p>To use dependency injection in your classes, simply pass the dependencies through the constructor:</p>
|
||||
<pre><code><?php echo \htmlentities(' class ClientService {
|
||||
private $clientRepository;
|
||||
|
||||
public function __construct(ClientRepository $clientRepository) {
|
||||
$this->clientRepository = $clientRepository;
|
||||
}
|
||||
|
||||
public function getClients() {
|
||||
return $this->clientRepository->findAll();
|
||||
}
|
||||
}'??'', ENT_QUOTES, 'UTF-8', false); ?></code></pre>
|
||||
|
||||
<p>With dependency injection, you can easily swap implementations and keep your code decoupled and more testable.</p>
|
||||
|
||||
<br><br>
|
||||
|
||||
<p>Github: <a href="https://github.com/syspanel/SysMVC.git">https://github.com/syspanel/SysMVC.git</a></p>
|
||||
|
||||
<br><br>
|
||||
|
||||
<h2 class="mt-4">Contact</h2>
|
||||
<p>If you're interested in SysMVC, get in touch:</p>
|
||||
<ul>
|
||||
<li>Email: <a href="mailto:syspanel@gmx.com">syspanel@gmx.com</a></li>
|
||||
<li>WhatsApp: <a href="https://wa.me/5535992261684" target="_blank">+55 (35) 99226-1684</a></li>
|
||||
</ul>
|
||||
|
||||
<hr class="my-5">
|
||||
|
||||
<h2 class="mt-4">🙎 Support the Project</h2>
|
||||
<p>If you find this project useful, consider supporting its development with a donation via PayPal:</p>
|
||||
<p>
|
||||
<a href="https://www.paypal.com/donate/?business=marcocosta@gmx.com¤cy_code=USD" target="_blank">
|
||||
<img src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif" alt="Donate via PayPal">
|
||||
</a>
|
||||
</p>
|
||||
</div>
|
||||
<?php $this->stopSection(); ?>
|
||||
|
||||
|
||||
|
||||
<?php if (isset($_shouldextend[1])) { echo $this->runChild('layout'); } ?>
|
||||
@@ -0,0 +1,199 @@
|
||||
<?php $_shouldextend[1]=1; ?>
|
||||
|
||||
<?php $this->startSection('title', 'Readme - SysMVC'); ?>
|
||||
|
||||
<?php $this->startSection('content'); ?>
|
||||
<div class="container mt-5">
|
||||
|
||||
<h1 class="display-4 text-primary">SysMVC</h1>
|
||||
<p class="lead">A lightweight PHP MVC framework by Marco Costa — MIT License</p>
|
||||
|
||||
<p>
|
||||
<strong>SysMVC</strong> is a system developed by <strong>Marco Costa</strong>
|
||||
(<a href="mailto:syspanel@gmx.com">syspanel@gmx.com</a>), with source code licensed under the <strong>MIT License</strong>.
|
||||
</p>
|
||||
<p>This software is offered for free and can be used, modified, and distributed under the terms of the MIT License.</p>
|
||||
<p>
|
||||
<strong>Website:</strong> <a href="https://sysmvc.syspanel.com.br" target="_blank">https://sysmvc.syspanel.com.br</a><br>
|
||||
<strong>GitHub:</strong> <a href="https://github.com/syspanel/SysMVC" target="_blank">https://github.com/syspanel/SysMVC</a>
|
||||
</p>
|
||||
|
||||
<hr class="my-5">
|
||||
|
||||
<?php /* Donations */ ?>
|
||||
<h2 class="mt-4">🙎 Support the Project</h2>
|
||||
<p>If you find this project useful, consider supporting its development with a donation via PayPal:</p>
|
||||
<p>
|
||||
<a href="https://www.paypal.com/donate/?business=marcocosta@gmx.com¤cy_code=USD" target="_blank">
|
||||
<img src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif" alt="Donate via PayPal">
|
||||
</a>
|
||||
</p>
|
||||
|
||||
<hr class="my-5">
|
||||
|
||||
<?php /* Features */ ?>
|
||||
<h2 class="mt-4">🚀 Features</h2>
|
||||
<ul>
|
||||
<li><strong>MVC Architecture</strong> — clean separation of concerns with Models, Views, and Controllers</li>
|
||||
<li><strong>ORM (Eloquent)</strong> — database access via <code>illuminate/database</code> (Laravel's Eloquent ORM)</li>
|
||||
<li><strong>Twin Template Engines</strong> — BladeOne and Twig, configured side by side</li>
|
||||
<li><strong>Dependency Injection</strong> — PHP-DI container with autowiring</li>
|
||||
<li><strong>Routing</strong> — flexible HTTP routing via Pecee SimpleRouter</li>
|
||||
<li><strong>CSRF Protection</strong> — built-in token generation and validation</li>
|
||||
<li><strong>Security Headers</strong> — applied automatically via <code>BaseController</code></li>
|
||||
<li><strong>Input/Output Sanitisation</strong> — <code>Sanitizer</code> service with email and URL awareness</li>
|
||||
<li><strong>CLI Console</strong> — Symfony Console commands for key generation and database migrations</li>
|
||||
<li><strong>Logging</strong> — Monolog writes to <code>logs/app.log</code></li>
|
||||
<li><strong>Mail</strong> — Symfony Mailer integration</li>
|
||||
<li><strong>Authentication</strong> — Delight Auth and PHP Auth libraries</li>
|
||||
</ul>
|
||||
|
||||
<hr class="my-5">
|
||||
|
||||
<?php /* Requirements */ ?>
|
||||
<h2 class="mt-4">🔧 Requirements</h2>
|
||||
<table class="table table-bordered table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Requirement</th>
|
||||
<th>Version</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr><td>PHP</td><td>>= 7.4</td></tr>
|
||||
<tr><td>Composer</td><td>latest stable</td></tr>
|
||||
<tr><td>Web Server</td><td>Apache or Nginx</td></tr>
|
||||
<tr><td>Database</td><td>MySQL 5.7+</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<hr class="my-5">
|
||||
|
||||
<?php /* Installation */ ?>
|
||||
<h2 class="mt-4">🛠🏽 Installation</h2>
|
||||
|
||||
<h4>1° Unzip the File</h4>
|
||||
<p>Download and unzip the SysMVC file to your local environment:</p>
|
||||
<pre><code>unzip sysmvc.zip -d sysmvc
|
||||
cd sysmvc</code></pre>
|
||||
|
||||
<h4>2° Install the Dependencies</h4>
|
||||
<p>Use Composer to install the project dependencies:</p>
|
||||
<pre><code>composer install</code></pre>
|
||||
|
||||
<h4>3° Configure the Environment</h4>
|
||||
<p>Copy the <code>.env.example</code> file to <code>.env</code> and configure your environment variables:</p>
|
||||
<pre><code>cp .env.example .env</code></pre>
|
||||
<p>Open the <code>.env</code> file and edit the following lines with your information:</p>
|
||||
<pre><code>DB_CONNECTION=mysql
|
||||
DB_HOST=127.0.0.1
|
||||
DB_PORT=3306
|
||||
DB_DATABASE=your_database
|
||||
DB_USERNAME=your_username
|
||||
DB_PASSWORD=your_password</code></pre>
|
||||
|
||||
<h4>4° Set Permissions</h4>
|
||||
<p>Change the permissions of the storage, cache, and logs directories to ensure the web server can write to them:</p>
|
||||
<pre><code>chmod -R 775 storage
|
||||
chmod -R 775 cache
|
||||
chmod -R 775 logs
|
||||
chmod -R 775 bootstrap/cache</code></pre>
|
||||
|
||||
<h4>5° Generate the Application Key</h4>
|
||||
<pre><code>php bin/console generate:app-key</code></pre>
|
||||
|
||||
<h4>6° Run the Migrations</h4>
|
||||
<p>Run the migrations to create the tables in the database:</p>
|
||||
<pre><code>php bin/console migrate:crudexample</code></pre>
|
||||
|
||||
<h4>7° Configure the Web Server</h4>
|
||||
|
||||
<h5>📄 Apache</h5>
|
||||
<p>Add the following configuration to your Apache configuration file:</p>
|
||||
<pre><code><VirtualHost *:80>
|
||||
ServerName sysmvc.local
|
||||
DocumentRoot /path/to/sysmvc/public
|
||||
|
||||
<Directory /path/to/sysmvc/public>
|
||||
AllowOverride All
|
||||
Require all granted
|
||||
</Directory>
|
||||
</VirtualHost></code></pre>
|
||||
|
||||
<h5>📄 Nginx</h5>
|
||||
<p>Add the following configuration to your Nginx configuration file:</p>
|
||||
<pre><code>server {
|
||||
listen 80;
|
||||
server_name sysmvc.local;
|
||||
root /path/to/sysmvc/public;
|
||||
|
||||
index index.php index.html index.htm;
|
||||
|
||||
location / {
|
||||
try_files $uri $uri/ /index.php?$query_string;
|
||||
}
|
||||
|
||||
location ~ \.php$ {
|
||||
include snippets/fastcgi-php.conf;
|
||||
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
|
||||
}
|
||||
}</code></pre>
|
||||
|
||||
<hr class="my-5">
|
||||
|
||||
<?php /* Dependencies */ ?>
|
||||
<h2 class="mt-4">📦 Dependencies Used</h2>
|
||||
<p>The project uses the following third-party packages, each with its respective license:</p>
|
||||
|
||||
<h3>✔ Packages with MIT License</h3>
|
||||
<ul>
|
||||
<li><strong>Illuminate Database</strong> → <code>illuminate/database</code></li>
|
||||
<li><strong>PHP Auth</strong> → <code>phpauth/phpauth</code></li>
|
||||
<li><strong>Monolog</strong> → <code>monolog/monolog</code></li>
|
||||
<li><strong>BladeOne</strong> → <code>eftec/bladeone</code></li>
|
||||
<li><strong>BladeOne HTML</strong> → <code>eftec/bladeonehtml</code></li>
|
||||
<li><strong>Twig</strong> → <code>twig/twig</code></li>
|
||||
<li><strong>Symfony Console</strong> → <code>symfony/console</code></li>
|
||||
<li><strong>Symfony Mailer</strong> → <code>symfony/mailer</code></li>
|
||||
<li><strong>Symfony Cache</strong> → <code>symfony/cache</code></li>
|
||||
<li><strong>Symfony Dotenv</strong> → <code>symfony/dotenv</code></li>
|
||||
<li><strong>Symfony Event Dispatcher</strong> → <code>symfony/event-dispatcher</code></li>
|
||||
<li><strong>Symfony Filesystem</strong> → <code>symfony/filesystem</code></li>
|
||||
<li><strong>Symfony Translation</strong> → <code>symfony/translation</code></li>
|
||||
<li><strong>Symfony MIME</strong> → <code>symfony/mime</code></li>
|
||||
<li><strong>Phinx</strong> → <code>robmorgan/phinx</code></li>
|
||||
<li><strong>Defuse Encryption</strong> → <code>defuse/php-encryption</code></li>
|
||||
<li><strong>Random Compatibility</strong> → <code>paragonie/random_compat</code></li>
|
||||
<li><strong>Rakit Validation</strong> → <code>rakit/validation</code></li>
|
||||
<li><strong>Carbon</strong> → <code>nesbot/carbon</code></li>
|
||||
<li><strong>Flysystem</strong> → <code>league/flysystem</code></li>
|
||||
<li><strong>Intervention Image</strong> → <code>intervention/image</code></li>
|
||||
<li><strong>Predis Redis Client</strong> → <code>predis/predis</code></li>
|
||||
<li><strong>PHP Dependency Injection</strong> → <code>php-di/php-di</code></li>
|
||||
<li><strong>Pecee SimpleRouter</strong> → <code>pecee/simple-router</code></li>
|
||||
<li><strong>Nyholm PSR7</strong> → <code>nyholm/psr7</code></li>
|
||||
<li><strong>FakerPHP Faker</strong> → <code>fakerphp/faker</code></li>
|
||||
<li><strong>Delight Auth</strong> → <code>delight-im/auth</code></li>
|
||||
<li><strong>Delight DB</strong> → <code>delight-im/db</code></li>
|
||||
<li><strong>Delight Cookie</strong> → <code>delight-im/cookie</code></li>
|
||||
<li><strong>Delight HTTP</strong> → <code>delight-im/http</code></li>
|
||||
<li><strong>Guzzle HTTP</strong> → <code>guzzlehttp/guzzle</code></li>
|
||||
<li><strong>Guzzle Promises</strong> → <code>guzzlehttp/promises</code></li>
|
||||
<li><strong>Guzzle PSR7</strong> → <code>guzzlehttp/psr7</code></li>
|
||||
</ul>
|
||||
|
||||
<hr class="my-5">
|
||||
|
||||
<?php /* Terms */ ?>
|
||||
<h2 class="mt-4">📝 Terms of Use</h2>
|
||||
<p>This project is licensed under the <strong>MIT License</strong>.</p>
|
||||
<p>You can use, copy, modify, merge, publish, distribute, sublicense, or sell copies of the Software, as long as the license and copyright notice are included in all copies or substantial portions of the Software.</p>
|
||||
<p>The Software is provided “as is”, without warranties of any kind. For more details, see the <a href="https://opensource.org/licenses/MIT" target="_blank">MIT License</a>.</p>
|
||||
<p>For more information, contact: <a href="mailto:syspanel@gmx.com" target="_blank">syspanel@gmx.com</a></p>
|
||||
|
||||
<p class="text-center mt-5">© 2026 Marco Costa — All rights reserved under the MIT License.</p>
|
||||
|
||||
</div>
|
||||
<?php $this->stopSection(); ?>
|
||||
|
||||
<?php if (isset($_shouldextend[1])) { echo $this->runChild('layout'); } ?>
|
||||
@@ -0,0 +1,43 @@
|
||||
<?php $_shouldextend[1]=1; ?>
|
||||
|
||||
<?php $this->startSection('title', 'Security'); ?>
|
||||
|
||||
<?php $this->startSection('content'); ?>
|
||||
<div class="container">
|
||||
<h2>Security</h2>
|
||||
<p>We have implemented several security measures in SysMVC to protect your application against threats. Here are some of the implementations:</p>
|
||||
<h3>CSRF Protection</h3>
|
||||
<p>We use CSRF tokens to protect against Cross-Site Request Forgery attacks.</p>
|
||||
<h3>Data Sanitization</h3>
|
||||
<p>All input and output data are sanitized to prevent code injections and other attacks.</p>
|
||||
<h3>Security Headers</h3>
|
||||
<p>We add HTTP security headers to protect against attacks like clickjacking and MIME-type sniffing.</p>
|
||||
<p>For more information about security, refer to the <a href="https://owasp.org/" target="_blank">OWASP documentation</a>.</p>
|
||||
</div>
|
||||
|
||||
<br><br>
|
||||
|
||||
<p>Github: <a href="https://github.com/syspanel/SysMVC.git">https://github.com/syspanel/SysMVC.git</a></p>
|
||||
|
||||
<br><br>
|
||||
|
||||
<h2 class="mt-4">Contact</h2>
|
||||
<p>If you're interested in SysMVC, feel free to contact us:</p>
|
||||
<ul>
|
||||
<li>Email: <a href="mailto:syspanel@gmx.com">syspanel@gmx.com</a></li>
|
||||
<li>WhatsApp: <a href="https://wa.me/5535992261684" target="_blank">+55 (35) 99226-1684</a></li>
|
||||
</ul>
|
||||
|
||||
<hr class="my-5">
|
||||
|
||||
<h2 class="mt-4">🙎 Support the Project</h2>
|
||||
<p>If you find this project useful, consider supporting its development with a donation via PayPal:</p>
|
||||
<p>
|
||||
<a href="https://www.paypal.com/donate/?business=marcocosta@gmx.com¤cy_code=USD" target="_blank">
|
||||
<img src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif" alt="Donate via PayPal">
|
||||
</a>
|
||||
</p>
|
||||
</div>
|
||||
<?php $this->stopSection(); ?>
|
||||
|
||||
<?php if (isset($_shouldextend[1])) { echo $this->runChild('layout'); } ?>
|
||||
@@ -0,0 +1,56 @@
|
||||
<?php $_shouldextend[1]=1; ?>
|
||||
|
||||
<?php $this->startSection('title', 'SysMVC Advantages - Blade, Twig, and Pure PHP'); ?>
|
||||
|
||||
<?php $this->startSection('content'); ?>
|
||||
<div class="container">
|
||||
<h2>SysMVC: Support for Blade, Twig, and Pure PHP</h2>
|
||||
<p>SysMVC is a versatile PHP framework that supports three template rendering methods: <strong>Blade</strong>, <strong>Twig</strong>, and <strong>Pure PHP</strong>. This flexibility allows developers to choose the tool that best suits their needs, providing several advantages.</p>
|
||||
|
||||
<h3>Blade Advantages</h3>
|
||||
<p>Blade is a simple yet powerful template engine developed for the Laravel framework. With Blade, developers can easily create reusable layouts and dynamic components. It is known for its clean and clear syntax, making template development fast and intuitive.</p>
|
||||
<p>For more information, refer to the <a href="https://laravel.com/docs/8.x/blade" target="_blank">official Blade documentation</a>.</p>
|
||||
|
||||
<h3>Twig Advantages</h3>
|
||||
<p>Twig is a flexible and robust template engine, widely used in various PHP frameworks. It offers a series of advanced features such as template inheritance, filters, custom extensions, and more. Twig is known for its security and performance, making it a reliable choice for projects of any scale.</p>
|
||||
<p>For more information, refer to the <a href="https://twig.symfony.com/doc/3.x/" target="_blank">official Twig documentation</a>.</p>
|
||||
|
||||
<h3>Pure PHP Advantages</h3>
|
||||
<p>SysMVC also supports template rendering using pure PHP. This means you can directly include PHP files and render content dynamically. If you prefer not to use a template engine, you can simply use the <code>include</code> command to include template files and generate the desired content. This can be a simpler and more straightforward choice for smaller projects or developers more familiar with PHP.</p>
|
||||
<p>Example of using pure PHP in SysMVC:</p>
|
||||
<pre><code>include('page.php');</code></pre>
|
||||
|
||||
<h3>Why Choose SysMVC?</h3>
|
||||
<p>With SysMVC, you don't have to worry about choosing between Blade, Twig, or Pure PHP. You can use any of these options, or even combine different approaches within the same project, depending on the context. This flexibility is a significant advantage, as it allows developers to take the best of each tool, adapting to their preferences and specific requirements.</p>
|
||||
|
||||
<h3>Conclusion</h3>
|
||||
<p>Whether you're a Blade enthusiast, a Twig fan, or someone who prefers pure PHP, SysMVC is ready to meet your needs. The ability to switch between these options makes SysMVC an excellent choice for developers seeking efficiency, flexibility, and ease of use in their PHP projects.</p>
|
||||
</div>
|
||||
|
||||
<br><br>
|
||||
|
||||
<p>Github: <a href="https://github.com/syspanel/SysMVC.git">https://github.com/syspanel/SysMVC.git</a></p>
|
||||
|
||||
<br><br>
|
||||
|
||||
<h2 class="mt-4">Contact</h2>
|
||||
<p>If you're interested in SysMVC, feel free to contact us:</p>
|
||||
<ul>
|
||||
<li>Email: <a href="mailto:syspanel@gmx.com">syspanel@gmx.com</a></li>
|
||||
<li>WhatsApp: <a href="https://wa.me/5535992261684" target="_blank">+55 (35) 99226-1684</a></li>
|
||||
</ul>
|
||||
|
||||
<hr class="my-5">
|
||||
|
||||
<h2 class="mt-4">🙎 Support the Project</h2>
|
||||
<p>If you find this project useful, consider supporting its development with a donation via PayPal:</p>
|
||||
<p>
|
||||
<a href="https://www.paypal.com/donate/?business=marcocosta@gmx.com¤cy_code=USD" target="_blank">
|
||||
<img src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif" alt="Donate via PayPal">
|
||||
</a>
|
||||
</p>
|
||||
</div>
|
||||
<?php $this->stopSection(); ?>
|
||||
|
||||
|
||||
<?php if (isset($_shouldextend[1])) { echo $this->runChild('layout'); } ?>
|
||||
@@ -0,0 +1,87 @@
|
||||
<?php $_shouldextend[1]=1; ?>
|
||||
|
||||
<?php $this->startSection('title', 'SysMVC - PHP Framework'); ?>
|
||||
|
||||
<?php $this->startSection('content'); ?>
|
||||
<div class="jumbotron text-center">
|
||||
<h2>Welcome to SysMVC</h2>
|
||||
<p>PHP framework for website and app development.</p>
|
||||
<a href="/home/details" class="btn btn-primary">Learn More Details</a>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-4">
|
||||
<div class="card">
|
||||
<img src="/images/1.jpg" class="card-img-top" alt="Image">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">Database Usage</h5>
|
||||
<p class="card-text">Learn how to use the database in SysMVC with CRUD examples.</p>
|
||||
<a href="/home/database" class="btn btn-primary">See More</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<div class="card">
|
||||
<img src="/images/2.jpg" class="card-img-top" alt="Image">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">Dependency Injection</h5>
|
||||
<p class="card-text">Learn how to use dependency injection with PHP-DI in SysMVC.</p>
|
||||
<a href="/home/dependency-injection" class="btn btn-primary">See More</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<div class="card">
|
||||
<img src="/images/3.jpg" class="card-img-top" alt="Image">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">App Projects</h5>
|
||||
<p class="card-text">See how to use SysMVC as a base for application development.</p>
|
||||
<a href="/home/app-development" class="btn btn-primary">See More</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<br>
|
||||
|
||||
<div class="row">
|
||||
<!-- New Card: Blade Templates -->
|
||||
<div class="col-md-4">
|
||||
<div class="card">
|
||||
<img src="/images/4.jpg" class="card-img-top" alt="Image">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">Blade & Twig Templates Engine</h5>
|
||||
<p class="card-text">Learn more about using Blade and/or Twig templates with SysMVC.</p>
|
||||
<a href="/home/templates-blade" class="btn btn-primary">See More</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<!-- New Card: Security -->
|
||||
<div class="col-md-4">
|
||||
<div class="card">
|
||||
<img src="/images/5.jpg" class="card-img-top" alt="Image">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">Security</h5>
|
||||
<p class="card-text">Security implementations in SysMVC.</p>
|
||||
<a href="/home/security" class="btn btn-primary">See More</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- New Card: Console CLI -->
|
||||
<div class="col-md-4">
|
||||
<div class="card">
|
||||
<img src="/images/6.jpg" class="card-img-top" alt="Image">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">Console CLI</h5>
|
||||
<p class="card-text">Use the CLI console to manage your SysMVC project.</p>
|
||||
<a href="/home/console-cli" class="btn btn-primary">See More</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php $this->stopSection(); ?>
|
||||
|
||||
<?php if (isset($_shouldextend[1])) { echo $this->runChild('layout'); } ?>
|
||||
@@ -0,0 +1,97 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title><?php echo $this->yieldContent('title', 'Default Title'); ?></title>
|
||||
|
||||
<meta name="author" content="Marco Costa">
|
||||
<meta name="description" content="SysMVC - PHP framework for website and app development.">
|
||||
<meta name="copyright" content="© 2026 Marco Costa" />
|
||||
<meta name="keywords" content="sites, web, development, framework, php, mit">
|
||||
<meta name="robots" content="index,nofollow">
|
||||
|
||||
<!-- DataTables -->
|
||||
<link href="DataTables/datatables.min.css" rel="stylesheet">
|
||||
<script src="DataTables/datatables.min.js"></script>
|
||||
|
||||
|
||||
<!-- Link to your custom CSS -->
|
||||
<link href="/css/bootstrap.css" rel="stylesheet">
|
||||
<link href="/css/jumbotron.css" rel="stylesheet">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<nav class="navbar navbar-expand-lg navbar-dark bg-primary">
|
||||
<a class="navbar-brand" href="/">SysMVC</a>
|
||||
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navbarNav">
|
||||
<ul class="navbar-nav">
|
||||
<li class="nav-item">
|
||||
<a class="nav-link text-white" href="/">Home</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link text-white" href="/crudexample">Blade - CRUD Example</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link text-white" href="/twigexample">Twig - CRUD Example</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link text-white" href="/readme">Readme</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link text-white" href="/about">About</a>
|
||||
</li>
|
||||
<!-- Add more links as needed -->
|
||||
</ul>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<div class="container my-4">
|
||||
<?php echo $this->yieldContent('content'); ?> <!-- The page content will be inserted here -->
|
||||
</div>
|
||||
|
||||
<footer class="bg-dark text-white text-center p-3">
|
||||
<p>© 2026 SysMVC 2.0 PHP Framework | <a href="https://opensource.org/licenses/MIT" class="text-white" target="_blank">License: MIT</a></p>
|
||||
</footer>
|
||||
|
||||
<!-- Bootstrap Scripts -->
|
||||
<script src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
|
||||
<script>window.jQuery || document.write('<script src="/js/jquery.slim.min.js"><\/script>')</script><script src="../js/bootstrap.bundle.min.js"></script>
|
||||
|
||||
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
console.log('jQuery is working');
|
||||
console.log('Bootstrap is working');
|
||||
});
|
||||
</script>
|
||||
|
||||
<!-- Cookie Consent Scripts -->
|
||||
<link href="consent/cookieconsent.min.css" rel="stylesheet" type="text/css" />
|
||||
<script src="consent/cookieconsent.min.js"></script>
|
||||
<script>
|
||||
window.addEventListener("load", function(){
|
||||
window.cookieconsent.initialise({
|
||||
"palette": {
|
||||
"popup": {
|
||||
"background": "#216942",
|
||||
"text": "#b2d192"
|
||||
},
|
||||
"button": {
|
||||
"background": "#afed71"
|
||||
}
|
||||
},
|
||||
"content": {
|
||||
"message": "We use essential cookies and similar technologies in accordance with our Terms of Use. By continuing to browse, you agree to these terms.",
|
||||
"dismiss": "Accept",
|
||||
"href": "consent/terms.html"
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,11 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title><?php echo \htmlentities($title??'', ENT_QUOTES, 'UTF-8', false); ?></title>
|
||||
</head>
|
||||
<body>
|
||||
<h1><?php echo \htmlentities($title??'', ENT_QUOTES, 'UTF-8', false); ?></h1>
|
||||
<p>Esta é a página do TesteController.</p>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
Reference in New Issue
Block a user