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:
Binary file not shown.
|
After Width: | Height: | Size: 72 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 69 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 71 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 71 KiB |
@@ -1,6 +1,6 @@
|
|||||||
MIT License
|
MIT License
|
||||||
|
|
||||||
Copyright (c) 2025 Marco Costa (marcocosta@gmx.com)
|
Copyright (c) 2026 Marco Costa (marcocosta@gmx.com)
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is provided to do so, subject to the following conditions:
|
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is provided to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
This software is free to use, modify, and distribute under the terms of the MIT License.
|
This software is free to use, modify, and distribute under the terms of the MIT License.
|
||||||
|
|
||||||
- **Website:** [https://sysmvc.duckdns.org](https://sysmvc.duckdns.org)
|
- **Website:** [https://sysmvc.syspanel.com.br](https://sysmvc.syspanel.com.br)
|
||||||
- **GitHub:** [https://github.com/syspanel/SysMVC](https://github.com/syspanel/SysMVC)
|
- **GitHub:** [https://github.com/syspanel/SysMVC](https://github.com/syspanel/SysMVC)
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -334,4 +334,4 @@ This project is licensed under the **MIT License**. You may use, copy, modify, m
|
|||||||
|
|
||||||
See [LICENSE](LICENSE) for the full license text.
|
See [LICENSE](LICENSE) for the full license text.
|
||||||
|
|
||||||
© 2025 Marco Costa — All rights reserved under the MIT License.
|
© 2026 Marco Costa — All rights reserved under the MIT License.
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ class CrudExampleController extends BaseController
|
|||||||
|
|
||||||
public function __construct(BladeOne $blade, Logger $logger)
|
public function __construct(BladeOne $blade, Logger $logger)
|
||||||
{
|
{
|
||||||
|
parent::__construct();
|
||||||
$this->blade = $blade;
|
$this->blade = $blade;
|
||||||
$this->logger = $logger;
|
$this->logger = $logger;
|
||||||
}
|
}
|
||||||
@@ -56,10 +57,9 @@ class CrudExampleController extends BaseController
|
|||||||
return 'Record not found';
|
return 'Record not found';
|
||||||
}
|
}
|
||||||
|
|
||||||
$csrfToken = generateCsrfToken();
|
|
||||||
$crudexample = Sanitizer::sanitizeOutput($crudexample->toArray());
|
$crudexample = Sanitizer::sanitizeOutput($crudexample->toArray());
|
||||||
|
|
||||||
return $this->blade->run('crudexample.edit', ['crudexample' => $crudexample, 'csrfToken' => $csrfToken]);
|
return $this->blade->run('crudexample.edit', ['crudexample' => $crudexample]);
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
$this->logger->error('Error when displaying the edit page: ' . $e->getMessage());
|
$this->logger->error('Error when displaying the edit page: ' . $e->getMessage());
|
||||||
return 'Error when displaying the edit page: ' . $e->getMessage();
|
return 'Error when displaying the edit page: ' . $e->getMessage();
|
||||||
|
|||||||
@@ -18,6 +18,6 @@ class IndexController extends BaseController
|
|||||||
public function index()
|
public function index()
|
||||||
{
|
{
|
||||||
// Pass data to the view and render
|
// Pass data to the view and render
|
||||||
return $this->blade->run('home', ['title' => 'Welcome to SysMVC2025!']);
|
return $this->blade->run('home', ['title' => 'Welcome to SysMVC 2.0!']);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ class TwigExampleController extends BaseController
|
|||||||
|
|
||||||
public function __construct(Environment $twig, Logger $logger, BladeOne $blade)
|
public function __construct(Environment $twig, Logger $logger, BladeOne $blade)
|
||||||
{
|
{
|
||||||
|
parent::__construct();
|
||||||
$this->twig = $twig;
|
$this->twig = $twig;
|
||||||
$this->logger = $logger;
|
$this->logger = $logger;
|
||||||
$this->blade = $blade;
|
$this->blade = $blade;
|
||||||
@@ -53,7 +54,7 @@ class TwigExampleController extends BaseController
|
|||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
$this->logger->info('Displaying the creation page of the TwigExampleController.');
|
$this->logger->info('Displaying the creation page of the TwigExampleController.');
|
||||||
return $this->twig->render('twigexample/create.twig.php', ['csrf_token' => htmlspecialchars(getCsrfToken(), ENT_QUOTES, 'UTF-8')]);
|
return $this->twig->render('twigexample/create.twig.php');
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
$this->logger->error('Error displaying the creation page: ' . $e->getMessage());
|
$this->logger->error('Error displaying the creation page: ' . $e->getMessage());
|
||||||
return 'Error displaying the creation page: ' . $e->getMessage();
|
return 'Error displaying the creation page: ' . $e->getMessage();
|
||||||
@@ -73,7 +74,7 @@ class TwigExampleController extends BaseController
|
|||||||
$twigexample = Sanitizer::sanitizeOutput($twigexample->toArray());
|
$twigexample = Sanitizer::sanitizeOutput($twigexample->toArray());
|
||||||
|
|
||||||
$this->logger->info("Displaying the edit page for the record with ID: $id.");
|
$this->logger->info("Displaying the edit page for the record with ID: $id.");
|
||||||
return $this->twig->render('twigexample/edit.twig.php', ['twigexample' => $twigexample, 'csrf_token' => htmlspecialchars(getCsrfToken(), ENT_QUOTES, 'UTF-8')]);
|
return $this->twig->render('twigexample/edit.twig.php', ['twigexample' => $twigexample]);
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
$this->logger->error('Error displaying the edit page: ' . $e->getMessage());
|
$this->logger->error('Error displaying the edit page: ' . $e->getMessage());
|
||||||
return 'Error displaying the edit page: ' . $e->getMessage();
|
return 'Error displaying the edit page: ' . $e->getMessage();
|
||||||
|
|||||||
@@ -6,6 +6,9 @@ class BaseController
|
|||||||
{
|
{
|
||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
|
if (session_status() === PHP_SESSION_NONE) {
|
||||||
|
session_start();
|
||||||
|
}
|
||||||
// Adding security headers
|
// Adding security headers
|
||||||
header("Content-Security-Policy: default-src 'self'; script-src 'self' https://trusted.cdn.com; style-src 'self' https://trusted.cdn.com; img-src 'self' data:;");
|
header("Content-Security-Policy: default-src 'self'; script-src 'self' https://trusted.cdn.com; style-src 'self' https://trusted.cdn.com; img-src 'self' data:;");
|
||||||
header("X-Frame-Options: DENY");
|
header("X-Frame-Options: DENY");
|
||||||
|
|||||||
+4
-1
@@ -18,7 +18,10 @@ function generateCsrfToken() {
|
|||||||
|
|
||||||
function getCsrfToken() {
|
function getCsrfToken() {
|
||||||
startSessionIfNeeded();
|
startSessionIfNeeded();
|
||||||
return $_SESSION['csrf_token'] ?? '';
|
if (empty($_SESSION['csrf_token'])) {
|
||||||
|
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));
|
||||||
|
}
|
||||||
|
return $_SESSION['csrf_token'];
|
||||||
}
|
}
|
||||||
|
|
||||||
function validateCsrfToken($token) {
|
function validateCsrfToken($token) {
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|
||||||
+1
-1
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "sysmvc/sysmvc",
|
"name": "sysmvc/sysmvc",
|
||||||
"description": "SysCMS",
|
"description": "SysCMS",
|
||||||
"version": "1.0.0",
|
"version": "2.0.0",
|
||||||
"date": "2025-03-08",
|
"date": "2025-03-08",
|
||||||
"authors": [
|
"authors": [
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -24,9 +24,9 @@ $containerBuilder->addDefinitions([
|
|||||||
$loader = new FilesystemLoader(VIEWS_PATH);
|
$loader = new FilesystemLoader(VIEWS_PATH);
|
||||||
$twig = new Environment($loader);
|
$twig = new Environment($loader);
|
||||||
|
|
||||||
// Register the PHP function getCsrfToken
|
// Register the csrf helper — returns a hidden input field (same as Blade's csrf())
|
||||||
$csrfFunction = new TwigFunction('csrf', function () {
|
$csrfFunction = new TwigFunction('csrf', function () {
|
||||||
return getCsrfToken();
|
return '<input type="hidden" name="csrf_token" value="' . htmlspecialchars(getCsrfToken(), ENT_QUOTES, 'UTF-8') . '">';
|
||||||
});
|
});
|
||||||
|
|
||||||
$twig->addFunction($csrfFunction);
|
$twig->addFunction($csrfFunction);
|
||||||
|
|||||||
@@ -2224,3 +2224,91 @@
|
|||||||
[2026-09-04T15:01:06.824371-03:00] app.INFO: Displaying the TwigExampleController page. [] []
|
[2026-09-04T15:01:06.824371-03:00] app.INFO: Displaying the TwigExampleController page. [] []
|
||||||
[2026-09-04T15:01:09.047869-03:00] app.INFO: Displaying the ReadMe page. [] []
|
[2026-09-04T15:01:09.047869-03:00] app.INFO: Displaying the ReadMe page. [] []
|
||||||
[2026-09-04T15:02:25.429496-03:00] app.INFO: Displaying the ReadMe page. [] []
|
[2026-09-04T15:02:25.429496-03:00] app.INFO: Displaying the ReadMe page. [] []
|
||||||
|
[2026-09-04T15:08:57.392912-03:00] app.INFO: Displaying the ReadMe page. [] []
|
||||||
|
[2026-09-04T15:09:02.888678-03:00] app.INFO: Displaying the ReadMe page. [] []
|
||||||
|
[2026-09-04T15:10:06.503930-03:00] app.INFO: Displaying the ReadMe page. [] []
|
||||||
|
[2026-09-04T15:10:53.510104-03:00] app.INFO: Displaying the ReadMe page. [] []
|
||||||
|
[2026-09-04T15:11:05.385265-03:00] app.INFO: Displaying the About page. [] []
|
||||||
|
[2026-09-04T15:11:12.042132-03:00] app.INFO: Displaying the TwigExampleController page. [] []
|
||||||
|
[2026-09-04T15:11:13.896408-03:00] app.INFO: Displaying the CrudExampleController page. [] []
|
||||||
|
[2026-09-04T15:11:28.256337-03:00] app.INFO: Displaying the CrudExampleController page. [] []
|
||||||
|
[2026-09-04T15:11:29.201653-03:00] app.INFO: Displaying the TwigExampleController page. [] []
|
||||||
|
[2026-09-04T15:11:32.819857-03:00] app.INFO: Displaying the record with ID: 1. [] []
|
||||||
|
[2026-09-04T15:11:34.661554-03:00] app.INFO: Displaying the edit page for the record with ID: 1. [] []
|
||||||
|
[2026-09-04T15:11:39.054148-03:00] app.INFO: Record with ID: 1 updated successfully. [] []
|
||||||
|
[2026-09-04T15:11:39.067675-03:00] app.INFO: Displaying the TwigExampleController page. [] []
|
||||||
|
[2026-09-04T15:11:42.106245-03:00] app.INFO: Displaying the creation page of the TwigExampleController. [] []
|
||||||
|
[2026-09-04T15:11:45.881272-03:00] app.INFO: Displaying the CrudExampleController page. [] []
|
||||||
|
[2026-09-04T15:14:07.775985-03:00] app.INFO: Displaying the CrudExampleController page. [] []
|
||||||
|
[2026-09-04T15:14:08.970775-03:00] app.INFO: Displaying the CrudExampleController page. [] []
|
||||||
|
[2026-09-04T15:14:21.422134-03:00] app.INFO: Displaying the TwigExampleController page. [] []
|
||||||
|
[2026-09-04T15:15:27.906319-03:00] app.INFO: Displaying the TwigExampleController page. [] []
|
||||||
|
[2026-09-04T15:16:13.895369-03:00] app.INFO: Displaying the TwigExampleController page. [] []
|
||||||
|
[2026-09-04T15:16:55.055355-03:00] app.INFO: Displaying the TwigExampleController page. [] []
|
||||||
|
[2026-09-04T15:17:06.611294-03:00] app.INFO: Displaying the TwigExampleController page. [] []
|
||||||
|
[2026-09-04T15:17:10.152207-03:00] app.INFO: Displaying the edit page for the record with ID: 1. [] []
|
||||||
|
[2026-09-04T15:17:26.130343-03:00] app.INFO: Record with ID: 1 updated successfully. [] []
|
||||||
|
[2026-09-04T15:17:26.142839-03:00] app.INFO: Displaying the TwigExampleController page. [] []
|
||||||
|
[2026-09-04T15:17:30.698147-03:00] app.INFO: Displaying the CrudExampleController page. [] []
|
||||||
|
[2026-09-04T15:17:34.429665-03:00] app.INFO: Deleting record with ID: 1 [] []
|
||||||
|
[2026-09-04T15:17:34.445863-03:00] app.INFO: Displaying the CrudExampleController page. [] []
|
||||||
|
[2026-09-04T15:17:39.244466-03:00] app.INFO: Displaying the ReadMe page. [] []
|
||||||
|
[2026-09-04T15:18:40.094464-03:00] app.INFO: Displaying the About page. [] []
|
||||||
|
[2026-09-04T15:18:51.970927-03:00] app.INFO: Displaying the Learn More page. [] []
|
||||||
|
[2026-09-04T15:19:16.745939-03:00] app.INFO: Displaying the About page. [] []
|
||||||
|
[2026-09-04T15:19:20.341399-03:00] app.INFO: Displaying the Learn More page. [] []
|
||||||
|
[2026-09-04T15:19:24.151797-03:00] app.INFO: Displaying the Database Usage page. [] []
|
||||||
|
[2026-09-04T15:19:27.611229-03:00] app.INFO: Displaying the Dependency Injection page. [] []
|
||||||
|
[2026-09-04T15:19:31.158256-03:00] app.INFO: Displaying the App Development page. [] []
|
||||||
|
[2026-09-04T15:19:34.747762-03:00] app.INFO: Displaying the Blade Templates page. [] []
|
||||||
|
[2026-09-04T15:19:38.483107-03:00] app.INFO: Displaying the Security page. [] []
|
||||||
|
[2026-09-04T15:19:42.093967-03:00] app.INFO: Displaying the Console CLI page. [] []
|
||||||
|
[2026-09-04T15:19:46.031877-03:00] app.INFO: Displaying the CrudExampleController page. [] []
|
||||||
|
[2026-09-04T15:20:03.661052-03:00] app.INFO: Displaying the CrudExampleController page. [] []
|
||||||
|
[2026-09-04T15:20:12.962989-03:00] app.INFO: Displaying the CrudExampleController page. [] []
|
||||||
|
[2026-09-04T15:20:22.404965-03:00] app.INFO: Deleting record with ID: 31 [] []
|
||||||
|
[2026-09-04T15:20:22.423612-03:00] app.INFO: Displaying the CrudExampleController page. [] []
|
||||||
|
[2026-09-04T15:20:35.140763-03:00] app.INFO: Displaying the TwigExampleController page. [] []
|
||||||
|
[2026-09-04T15:20:39.779376-03:00] app.INFO: Displaying the edit page for the record with ID: 2. [] []
|
||||||
|
[2026-09-04T15:20:48.263698-03:00] app.INFO: Record with ID: 2 updated successfully. [] []
|
||||||
|
[2026-09-04T15:20:48.274593-03:00] app.INFO: Displaying the TwigExampleController page. [] []
|
||||||
|
[2026-09-04T15:21:28.763130-03:00] app.INFO: Exibindo a página do TesteController. [] []
|
||||||
|
[2026-09-04T15:21:32.992434-03:00] app.INFO: Displaying the creation page of the TwigExampleController. [] []
|
||||||
|
[2026-09-04T15:21:47.967633-03:00] app.INFO: Displaying the TwigExampleController page. [] []
|
||||||
|
[2026-09-04T15:21:53.707163-03:00] app.INFO: Displaying the record with ID: 32. [] []
|
||||||
|
[2026-09-04T15:22:02.897798-03:00] app.INFO: Displaying the TwigExampleController page. [] []
|
||||||
|
[2026-09-04T15:22:07.507718-03:00] app.INFO: Record with ID: 32 deleted successfully. [] []
|
||||||
|
[2026-09-04T15:22:07.518715-03:00] app.INFO: Displaying the TwigExampleController page. [] []
|
||||||
|
[2026-09-04T15:27:09.237549-03:00] app.INFO: Displaying the TwigExampleController page. [] []
|
||||||
|
[2026-09-04T15:27:20.615506-03:00] app.INFO: Displaying the record with ID: 2. [] []
|
||||||
|
[2026-09-04T15:28:12.564656-03:00] app.INFO: Displaying the creation page of the TwigExampleController. [] []
|
||||||
|
[2026-09-04T15:28:20.824727-03:00] app.INFO: Displaying the edit page for the record with ID: 2. [] []
|
||||||
|
[2026-09-04T15:28:27.408739-03:00] app.INFO: Displaying the CrudExampleController page. [] []
|
||||||
|
[2026-09-04T15:28:39.316445-03:00] app.INFO: Displaying the ReadMe page. [] []
|
||||||
|
[2026-09-04T15:28:45.330389-03:00] app.INFO: Displaying the About page. [] []
|
||||||
|
[2026-09-04T15:30:55.127578-03:00] app.INFO: Displaying the creation page of the TwigExampleController. [] []
|
||||||
|
[2026-09-04T15:31:00.638965-03:00] app.INFO: Displaying the edit page for the record with ID: 2. [] []
|
||||||
|
[2026-09-04T15:31:14.614384-03:00] app.INFO: Displaying the creation page of the TwigExampleController. [] []
|
||||||
|
[2026-09-04T15:31:31.401582-03:00] app.INFO: Displaying the TwigExampleController page. [] []
|
||||||
|
[2026-09-04T15:31:40.425300-03:00] app.INFO: Displaying the edit page for the record with ID: 33. [] []
|
||||||
|
[2026-09-04T15:31:53.770744-03:00] app.INFO: Record with ID: 33 updated successfully. [] []
|
||||||
|
[2026-09-04T15:31:53.784605-03:00] app.INFO: Displaying the TwigExampleController page. [] []
|
||||||
|
[2026-09-04T15:33:04.491819-03:00] app.INFO: Displaying the TwigExampleController page. [] []
|
||||||
|
[2026-09-04T15:34:02.076212-03:00] app.INFO: Displaying the CrudExampleController page. [] []
|
||||||
|
[2026-09-04T15:34:21.876520-03:00] app.INFO: Displaying the TwigExampleController page. [] []
|
||||||
|
[2026-09-04T15:35:01.330656-03:00] app.INFO: Displaying the TwigExampleController page. [] []
|
||||||
|
[2026-09-04T15:35:24.355757-03:00] app.INFO: Displaying the TwigExampleController page. [] []
|
||||||
|
[2026-09-04T15:35:26.521515-03:00] app.INFO: Displaying the TwigExampleController page. [] []
|
||||||
|
[2026-09-04T15:35:43.326750-03:00] app.INFO: Displaying the CrudExampleController page. [] []
|
||||||
|
[2026-09-04T15:35:45.553298-03:00] app.INFO: Displaying the TwigExampleController page. [] []
|
||||||
|
[2026-09-04T15:37:29.929344-03:00] app.INFO: Displaying the CrudExampleController page. [] []
|
||||||
|
[2026-09-04T15:37:36.326721-03:00] app.INFO: Displaying the TwigExampleController page. [] []
|
||||||
|
[2026-09-04T15:38:30.410616-03:00] app.INFO: Displaying the CrudExampleController page. [] []
|
||||||
|
[2026-09-04T15:38:33.170180-03:00] app.INFO: Displaying the CrudExampleController page. [] []
|
||||||
|
[2026-09-04T15:38:42.632948-03:00] app.INFO: Displaying the TwigExampleController page. [] []
|
||||||
|
[2026-09-04T15:39:08.862582-03:00] app.INFO: Displaying the TwigExampleController page. [] []
|
||||||
|
[2026-09-04T15:39:12.227268-03:00] app.INFO: Displaying the CrudExampleController page. [] []
|
||||||
|
[2026-09-04T15:39:13.741424-03:00] app.INFO: Displaying the TwigExampleController page. [] []
|
||||||
|
[2026-09-04T15:42:22.365575-03:00] app.INFO: Displaying the TwigExampleController page. [] []
|
||||||
|
[2026-09-04T15:42:28.561495-03:00] app.INFO: Displaying the ReadMe page. [] []
|
||||||
|
[2026-09-04T15:42:37.807210-03:00] app.INFO: Displaying the About page. [] []
|
||||||
|
|||||||
@@ -25,14 +25,14 @@
|
|||||||
<td>{{ $item['name'] }}</td>
|
<td>{{ $item['name'] }}</td>
|
||||||
<td>{{ $item['company'] }}</td>
|
<td>{{ $item['company'] }}</td>
|
||||||
<td>
|
<td>
|
||||||
<a href="/crudexample/show/{{ $item['id'] }}" class="btn btn-info btn-sm me-2">View</a>
|
<div class="d-flex">
|
||||||
<a href="/crudexample/edit/{{ $item['id'] }}" class="btn btn-warning btn-sm me-2">Edit</a>
|
<a href="/crudexample/show/{{ $item['id'] }}" class="btn btn-info btn-sm mr-1">View</a>
|
||||||
|
<a href="/crudexample/edit/{{ $item['id'] }}" class="btn btn-warning btn-sm mr-1">Edit</a>
|
||||||
<!-- Delete form -->
|
<form action="/crudexample/delete/{{ $item['id'] }}" method="POST" class="d-inline">
|
||||||
<form action="/crudexample/delete/{{ $item['id'] }}" method="POST" style="display:inline;">
|
{{ csrf() }}
|
||||||
<input type="hidden" name="_method" value="POST">
|
<button type="submit" class="btn btn-danger btn-sm" onclick="return confirm('Are you sure?')">Delete</button>
|
||||||
<button type="submit" class="btn btn-danger btn-sm" onclick="return confirm('Are you sure?')">Delete</button>
|
</form>
|
||||||
</form>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@endforeach
|
@endforeach
|
||||||
|
|||||||
@@ -35,12 +35,12 @@
|
|||||||
<td>{{ $crudexample['notes'] }}</td>
|
<td>{{ $crudexample['notes'] }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
<a href="/crudexample/edit/{{ $crudexample['id'] }}" class="btn btn-warning me-2">Edit</a>
|
<a href="/crudexample/edit/{{ $crudexample['id'] }}" class="btn btn-warning mr-2">Edit</a>
|
||||||
|
|
||||||
<!-- Delete form -->
|
<!-- Delete form -->
|
||||||
<form action="/crudexample/delete/{{ $crudexample['id'] }}" method="POST" style="display:inline;">
|
<form action="/crudexample/delete/{{ $crudexample['id'] }}" method="POST" class="d-inline">
|
||||||
<input type="hidden" name="_method" value="POST">
|
{{ csrf() }}
|
||||||
<button type="submit" class="btn btn-danger me-2" onclick="return confirm('Are you sure?')">Delete</button>
|
<button type="submit" class="btn btn-danger mr-2" onclick="return confirm('Are you sure?')">Delete</button>
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
<a href="/crudexample" class="btn btn-secondary">Back to List</a>
|
<a href="/crudexample" class="btn btn-secondary">Back to List</a>
|
||||||
|
|||||||
@@ -13,12 +13,16 @@
|
|||||||
<p>Developer and Creator of SysMVC</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>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>Contact email: <a href="mailto:syspanel@gmx.com">syspanel@gmx.com</a><p>
|
||||||
<p>Github: <a href="https://github.com/syspanel/SysMVC.git" target="_blak">https://github.com/syspanel/SysMVC.git</a></p>
|
<p>Github: <a href="https://github.com/syspanel/SysMVC.git" target="_blank">https://github.com/syspanel/SysMVC.git</a></p>
|
||||||
## Donations via PayPal
|
|
||||||
|
|
||||||
If you wish to support the development of SysMVC, consider making a donation via PayPal to:
|
<hr class="my-5">
|
||||||
|
|
||||||
<h2 class="mt-4">Donations via PAYPAL</h2>
|
<h2 class="mt-4">🙎 Support the Project</h2>
|
||||||
<p>If you wish to support the development of SysMVC, consider making a donation via PAYPAL to <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>
|
<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>
|
</div>
|
||||||
@endsection
|
@endsection
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ echo $blade->run("home.index", ["clients" => $clients]);
|
|||||||
<p>Github: <a href="https://github.com/syspanel/SysMVC.git">https://github.com/syspanel/SysMVC.git</a></p>
|
<p>Github: <a href="https://github.com/syspanel/SysMVC.git">https://github.com/syspanel/SysMVC.git</a></p>
|
||||||
|
|
||||||
<br><br>
|
<br><br>
|
||||||
|
|
||||||
<h2 class="mt-4">Contact</h2>
|
<h2 class="mt-4">Contact</h2>
|
||||||
<p>If you're interested in SysMVC, get in touch:</p>
|
<p>If you're interested in SysMVC, get in touch:</p>
|
||||||
<ul>
|
<ul>
|
||||||
@@ -40,11 +40,14 @@ echo $blade->run("home.index", ["clients" => $clients]);
|
|||||||
<li>WhatsApp: <a href="https://wa.me/5535992261684" target="_blank">+55 (35) 99226-1684</a></li>
|
<li>WhatsApp: <a href="https://wa.me/5535992261684" target="_blank">+55 (35) 99226-1684</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
## Donations via PayPal
|
<hr class="my-5">
|
||||||
|
|
||||||
If you wish to support the development of SysMVC, consider making a donation via PayPal to:
|
<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>
|
||||||
<h2 class="mt-4">Donations via PAYPAL</h2>
|
<p>
|
||||||
<p>If you wish to support the development of SysMVC, consider making a donation via PAYPAL to <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>
|
<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>
|
</div>
|
||||||
@endsection
|
@endsection
|
||||||
|
|||||||
@@ -78,11 +78,14 @@
|
|||||||
<li>WhatsApp: <a href="https://wa.me/5535992261684" target="_blank">+55 (35) 99226-1684</a></li>
|
<li>WhatsApp: <a href="https://wa.me/5535992261684" target="_blank">+55 (35) 99226-1684</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<br>
|
<hr class="my-5">
|
||||||
## Donations via PayPal
|
|
||||||
|
|
||||||
If you wish to support the development of SysMVC, consider making a donation via PayPal to:
|
<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>
|
||||||
<h2 class="mt-4">Donations via PAYPAL</h2>
|
<p>
|
||||||
<p>If you wish to support the development of SysMVC, consider making a donation via PAYPAL to <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>
|
<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>
|
||||||
@endsection
|
@endsection
|
||||||
|
|||||||
@@ -48,19 +48,21 @@ $client->delete();
|
|||||||
|
|
||||||
<br><br>
|
<br><br>
|
||||||
|
|
||||||
<h2 class="mt-4">Contact</h2>
|
<h2 class="mt-4">Contact</h2>
|
||||||
<p>If you're interested in SysMVC, get in touch:</p>
|
<p>If you're interested in SysMVC, get in touch:</p>
|
||||||
<ul>
|
<ul>
|
||||||
<li>Email: <a href="mailto:syspanel@gmx.com">syspanel@gmx.com</a></li>
|
<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>
|
<li>WhatsApp: <a href="https://wa.me/5535992261684" target="_blank">+55 (35) 99226-1684</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
## Donations via PayPal
|
<hr class="my-5">
|
||||||
|
|
||||||
If you wish to support the development of SysMVC, consider making a donation via PayPal to:
|
|
||||||
|
|
||||||
<h2 class="mt-4">Donations via PAYPAL</h2>
|
|
||||||
<p>If you wish to support the development of SysMVC, consider making a donation via PAYPAL to <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>
|
|
||||||
|
|
||||||
|
<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>
|
</div>
|
||||||
@endsection
|
@endsection
|
||||||
|
|||||||
@@ -53,12 +53,15 @@
|
|||||||
<li>WhatsApp: <a href="https://wa.me/5535992261684" target="_blank">+55 (35) 99226-1684</a></li>
|
<li>WhatsApp: <a href="https://wa.me/5535992261684" target="_blank">+55 (35) 99226-1684</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
## Donations via PayPal
|
<hr class="my-5">
|
||||||
|
|
||||||
If you wish to support the development of SysMVC, consider making a donation via PayPal to:
|
<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>
|
||||||
<h2 class="mt-4">Donations via PAYPAL</h2>
|
<p>
|
||||||
<p>If you wish to support the development of SysMVC, consider making a donation via PAYPAL to <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>
|
<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>
|
</div>
|
||||||
@endsection
|
@endsection
|
||||||
|
|
||||||
|
|||||||
@@ -36,7 +36,7 @@
|
|||||||
<pre class="bg-light p-3">
|
<pre class="bg-light p-3">
|
||||||
MIT License
|
MIT License
|
||||||
|
|
||||||
Copyright (c) 2025 Marco Costa
|
Copyright (c) 2026 Marco Costa
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
@@ -70,13 +70,14 @@ SOFTWARE.
|
|||||||
<li>WhatsApp: <a href="https://wa.me/5535992261684" target="_blank">+55 (35) 99226-1684</a></li>
|
<li>WhatsApp: <a href="https://wa.me/5535992261684" target="_blank">+55 (35) 99226-1684</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<br>
|
<hr class="my-5">
|
||||||
## Donations via PayPal
|
|
||||||
|
|
||||||
If you wish to support the development of SysMVC, consider making a donation via PayPal to:
|
|
||||||
|
|
||||||
<h2 class="mt-4">Donations via PAYPAL</h2>
|
|
||||||
<p>If you wish to support the development of SysMVC, consider making a donation via PAYPAL to <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>
|
|
||||||
|
|
||||||
|
<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>
|
</div>
|
||||||
@endsection
|
@endsection
|
||||||
|
|||||||
@@ -1,85 +1,114 @@
|
|||||||
@extends('layout')
|
@extends('layout')
|
||||||
|
|
||||||
@section('title', 'Project Information')
|
@section('title', 'Readme - SysMVC')
|
||||||
|
|
||||||
@section('content')
|
@section('content')
|
||||||
<div class="container mt-5">
|
<div class="container mt-5">
|
||||||
<h1 class="display-4 text-primary">SysMVC - PHP Framework</h1>
|
|
||||||
|
|
||||||
<br>
|
<h1 class="display-4 text-primary">SysMVC</h1>
|
||||||
|
<p class="lead">A lightweight PHP MVC framework by Marco Costa — MIT License</p>
|
||||||
|
|
||||||
<p>Github: <a href="https://github.com/syspanel/SysMVC.git" target="_blank">https://github.com/syspanel/SysMVC.git</a></p>
|
<p>
|
||||||
|
<strong>SysMVC</strong> is a system developed by <strong>Marco Costa</strong>
|
||||||
<br><br>
|
(<a href="mailto:syspanel@gmx.com">syspanel@gmx.com</a>), with source code licensed under the <strong>MIT License</strong>.
|
||||||
|
</p>
|
||||||
<p class="lead">Project Information</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>This software is offered for free and can be used, modified, and distributed under the terms of the MIT License.</p>
|
||||||
<p>Project website: <a href="https://sysmvc.syspanel.com.br">https://sysmvc.syspanel.com.br</a></p>
|
<p>
|
||||||
## Donations via PayPal
|
<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>
|
||||||
|
|
||||||
If you wish to support the development of SysMVC, consider making a donation via PayPal to:
|
<hr class="my-5">
|
||||||
|
|
||||||
<h2 class="mt-4">Donations via PAYPAL</h2>
|
{{-- Donations --}}
|
||||||
<p>If you wish to support the development of SysMVC, consider making a donation via PAYPAL to <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>
|
<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>
|
<hr class="my-5">
|
||||||
|
|
||||||
<h2 class="mt-4">🚀 Installation Tutorial</h2>
|
{{-- Features --}}
|
||||||
|
<h2 class="mt-4">🚀 Features</h2>
|
||||||
<h3>✅ Prerequisites</h3>
|
|
||||||
<ul>
|
<ul>
|
||||||
<li><strong>PHP 8.1</strong> or higher</li>
|
<li><strong>MVC Architecture</strong> — clean separation of concerns with Models, Views, and Controllers</li>
|
||||||
<li><strong>Composer</strong> (dependency manager for PHP)</li>
|
<li><strong>ORM (Eloquent)</strong> — database access via <code>illuminate/database</code> (Laravel's Eloquent ORM)</li>
|
||||||
<li><strong>Web Server</strong> (Apache or Nginx)</li>
|
<li><strong>Twin Template Engines</strong> — BladeOne and Twig, configured side by side</li>
|
||||||
<li><strong>MySQL</strong> or other compatible database</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>
|
</ul>
|
||||||
|
|
||||||
<h3>🔧 Step-by-Step</h3>
|
<hr class="my-5">
|
||||||
|
|
||||||
<h4>1️⃣ Unzip the File</h4>
|
{{-- 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">
|
||||||
|
|
||||||
|
{{-- 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>
|
<p>Download and unzip the SysMVC file to your local environment:</p>
|
||||||
<pre><code>unzip sysmvc.zip -d sysmvc
|
<pre><code>unzip sysmvc.zip -d sysmvc
|
||||||
cd sysmvc
|
cd sysmvc</code></pre>
|
||||||
</code></pre>
|
|
||||||
|
|
||||||
<h4>2️⃣ Install the Dependencies</h4>
|
<h4>2° Install the Dependencies</h4>
|
||||||
<p>Use Composer to install the project dependencies:</p>
|
<p>Use Composer to install the project dependencies:</p>
|
||||||
<pre><code>composer install
|
<pre><code>composer install</code></pre>
|
||||||
</code></pre>
|
|
||||||
|
|
||||||
<h4>3️⃣ Configure the Environment</h4>
|
<h4>3° Configure the Environment</h4>
|
||||||
<p>Copy the <code>.env.example</code> file to <code>.env</code> and configure your environment variables:</p>
|
<p>Copy the <code>.env.example</code> file to <code>.env</code> and configure your environment variables:</p>
|
||||||
<pre><code>cp .env.example .env
|
<pre><code>cp .env.example .env</code></pre>
|
||||||
</code></pre>
|
|
||||||
|
|
||||||
<p>Open the <code>.env</code> file and edit the following lines with your information:</p>
|
<p>Open the <code>.env</code> file and edit the following lines with your information:</p>
|
||||||
<pre><code>DB_CONNECTION=mysql
|
<pre><code>DB_CONNECTION=mysql
|
||||||
DB_HOST=127.0.0.1
|
DB_HOST=127.0.0.1
|
||||||
DB_PORT=3306
|
DB_PORT=3306
|
||||||
DB_DATABASE=your_database
|
DB_DATABASE=your_database
|
||||||
DB_USERNAME=your_username
|
DB_USERNAME=your_username
|
||||||
DB_PASSWORD=your_password
|
DB_PASSWORD=your_password</code></pre>
|
||||||
</code></pre>
|
|
||||||
|
|
||||||
<h4>4️⃣ Set Permissions</h4>
|
<h4>4° Set Permissions</h4>
|
||||||
<p>Change the permissions of the storage and cache directories to ensure the web server can write to them:</p>
|
<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
|
<pre><code>chmod -R 775 storage
|
||||||
chmod -R 775 bootstrap/cache
|
chmod -R 775 cache
|
||||||
</code></pre>
|
chmod -R 775 logs
|
||||||
|
chmod -R 775 bootstrap/cache</code></pre>
|
||||||
|
|
||||||
<h4>5️⃣ Generate the Application Key</h4>
|
<h4>5° Generate the Application Key</h4>
|
||||||
<pre><code>php bin/console generate:app-key
|
<pre><code>php bin/console generate:app-key</code></pre>
|
||||||
</code></pre>
|
|
||||||
|
|
||||||
<h4>6️⃣ Run the Migrations</h4>
|
<h4>6° Run the Migrations</h4>
|
||||||
<p>Run the migrations to create the tables in the database:</p>
|
<p>Run the migrations to create the tables in the database:</p>
|
||||||
<pre><code>php bin/console migrate:crudexample
|
<pre><code>php bin/console migrate:crudexample</code></pre>
|
||||||
</code></pre>
|
|
||||||
|
|
||||||
<h4>7️⃣ Configure the Web Server</h4>
|
<h4>7° Configure the Web Server</h4>
|
||||||
|
|
||||||
<h5>📌 Apache</h5>
|
<h5>📄 Apache</h5>
|
||||||
<p>Add the following configuration to your Apache configuration file:</p>
|
<p>Add the following configuration to your Apache configuration file:</p>
|
||||||
<pre><code><VirtualHost *:80>
|
<pre><code><VirtualHost *:80>
|
||||||
ServerName sysmvc.local
|
ServerName sysmvc.local
|
||||||
@@ -89,10 +118,9 @@ chmod -R 775 bootstrap/cache
|
|||||||
AllowOverride All
|
AllowOverride All
|
||||||
Require all granted
|
Require all granted
|
||||||
</Directory>
|
</Directory>
|
||||||
</VirtualHost>
|
</VirtualHost></code></pre>
|
||||||
</code></pre>
|
|
||||||
|
|
||||||
<h5>📌 Nginx</h5>
|
<h5>📄 Nginx</h5>
|
||||||
<p>Add the following configuration to your Nginx configuration file:</p>
|
<p>Add the following configuration to your Nginx configuration file:</p>
|
||||||
<pre><code>server {
|
<pre><code>server {
|
||||||
listen 80;
|
listen 80;
|
||||||
@@ -109,46 +137,61 @@ chmod -R 775 bootstrap/cache
|
|||||||
include snippets/fastcgi-php.conf;
|
include snippets/fastcgi-php.conf;
|
||||||
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
|
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
|
||||||
}
|
}
|
||||||
}
|
}</code></pre>
|
||||||
</code></pre>
|
|
||||||
|
|
||||||
<hr>
|
<hr class="my-5">
|
||||||
|
|
||||||
<h2 class="mt-4">📦 Dependencies Used</h2>
|
{{-- Dependencies --}}
|
||||||
|
<h2 class="mt-4">📦 Dependencies Used</h2>
|
||||||
<p>The project uses the following third-party packages, each with its respective license:</p>
|
<p>The project uses the following third-party packages, each with its respective license:</p>
|
||||||
|
|
||||||
<h3>✅ Packages with MIT License</h3>
|
<h3>✔ Packages with MIT License</h3>
|
||||||
<ul>
|
<ul>
|
||||||
<li><strong>Illuminate Database</strong> → <a href="https://github.com/illuminate/database" target="_blank">illuminate/database</a></li>
|
<li><strong>Illuminate Database</strong> → <code>illuminate/database</code></li>
|
||||||
<li><strong>Monolog</strong> → <a href="https://github.com/Seldaek/monolog" target="_blank">monolog/monolog</a></li>
|
<li><strong>PHP Auth</strong> → <code>phpauth/phpauth</code></li>
|
||||||
<li><strong>BladeOne</strong> → <a href="https://github.com/EFTEC/BladeOne" target="_blank">eftec/bladeone</a></li>
|
<li><strong>Monolog</strong> → <code>monolog/monolog</code></li>
|
||||||
<li><strong>Twig</strong> → <a href="https://github.com/twigphp/Twig" target="_blank">twig/twig</a></li>
|
<li><strong>BladeOne</strong> → <code>eftec/bladeone</code></li>
|
||||||
<li><strong>Symfony Console</strong> → <a href="https://github.com/symfony/console" target="_blank">symfony/console</a></li>
|
<li><strong>BladeOne HTML</strong> → <code>eftec/bladeonehtml</code></li>
|
||||||
<li><strong>Phinx</strong> → <a href="https://github.com/cakephp/phinx" target="_blank">robmorgan/phinx</a></li>
|
<li><strong>Twig</strong> → <code>twig/twig</code></li>
|
||||||
<li><strong>Defuse Encryption</strong> → <a href="https://github.com/defuse/php-encryption" target="_blank">defuse/php-encryption</a></li>
|
<li><strong>Symfony Console</strong> → <code>symfony/console</code></li>
|
||||||
<li><strong>Random Compatibility</strong> → <a href="https://github.com/paragonie/random_compat" target="_blank">paragonie/random_compat</a></li>
|
<li><strong>Symfony Mailer</strong> → <code>symfony/mailer</code></li>
|
||||||
<li><strong>Rakit Validation</strong> → <a href="https://github.com/rakit/validation" target="_blank">rakit/validation</a></li>
|
<li><strong>Symfony Cache</strong> → <code>symfony/cache</code></li>
|
||||||
<li><strong>Carbon</strong> → <a href="https://github.com/briannesbitt/Carbon" target="_blank">nesbot/carbon</a></li>
|
<li><strong>Symfony Dotenv</strong> → <code>symfony/dotenv</code></li>
|
||||||
<li><strong>Flysystem</strong> → <a href="https://github.com/thephpleague/flysystem" target="_blank">league/flysystem</a></li>
|
<li><strong>Symfony Event Dispatcher</strong> → <code>symfony/event-dispatcher</code></li>
|
||||||
<li><strong>Intervention Image</strong> → <a href="https://github.com/Intervention/image" target="_blank">intervention/image</a></li>
|
<li><strong>Symfony Filesystem</strong> → <code>symfony/filesystem</code></li>
|
||||||
<li><strong>Symfony Cache</strong> → <a href="https://github.com/symfony/cache" target="_blank">symfony/cache</a></li>
|
<li><strong>Symfony Translation</strong> → <code>symfony/translation</code></li>
|
||||||
<li><strong>Predis Redis Client</strong> → <a href="https://github.com/predis/predis" target="_blank">predis/predis</a></li>
|
<li><strong>Symfony MIME</strong> → <code>symfony/mime</code></li>
|
||||||
<li><strong>PHP Dependency Injection</strong> → <a href="https://github.com/PHP-DI/PHP-DI" target="_blank">php-di/php-di</a></li>
|
<li><strong>Phinx</strong> → <code>robmorgan/phinx</code></li>
|
||||||
<li><strong>Symfony Dotenv</strong> → <a href="https://github.com/symfony/dotenv" target="_blank">symfony/dotenv</a></li>
|
<li><strong>Defuse Encryption</strong> → <code>defuse/php-encryption</code></li>
|
||||||
<li><strong>Pecee SimpleRouter</strong> → <a href="https://github.com/pecee/pecee-simple-router" target="_blank">pecee/simple-router</a></li>
|
<li><strong>Random Compatibility</strong> → <code>paragonie/random_compat</code></li>
|
||||||
<li><strong>Nyholm PSR7</strong> → <a href="https://github.com/Nyholm/psr7" target="_blank">nyholm/psr7</a></li>
|
<li><strong>Rakit Validation</strong> → <code>rakit/validation</code></li>
|
||||||
<li><strong>FakerPHP Faker</strong> → <a href="https://github.com/FakerPHP/Faker" target="_blank">fakerphp/faker</a></li>
|
<li><strong>Carbon</strong> → <code>nesbot/carbon</code></li>
|
||||||
<li><strong>Symfony Mailer</strong> → <a href="https://github.com/symfony/mailer" target="_blank">symfony/mailer</a></li>
|
<li><strong>Flysystem</strong> → <code>league/flysystem</code></li>
|
||||||
</ul>
|
<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>
|
<hr class="my-5">
|
||||||
|
|
||||||
<h2 class="mt-4">📜 Terms of Use</h2>
|
{{-- Terms --}}
|
||||||
|
<h2 class="mt-4">📝 Terms of Use</h2>
|
||||||
<p>This project is licensed under the <strong>MIT License</strong>.</p>
|
<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, provided that the license and copyright notice are included in all copies or substantial portions of the Software.</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 any warranty of any kind. For more details, please consult the <a href="https://opensource.org/licenses/MIT" target="_blank">MIT License</a>.</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:sysmvc@syspanel.com.br" target="_blank">sysmvc@syspanel.com.br</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>
|
||||||
|
|
||||||
<p class="text-center mt-5">© 2025 Marco Costa - All rights reserved under the MIT License.</p>
|
|
||||||
</div>
|
</div>
|
||||||
@endsection
|
@endsection
|
||||||
|
|||||||
@@ -28,12 +28,14 @@
|
|||||||
<li>WhatsApp: <a href="https://wa.me/5535992261684" target="_blank">+55 (35) 99226-1684</a></li>
|
<li>WhatsApp: <a href="https://wa.me/5535992261684" target="_blank">+55 (35) 99226-1684</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<br>
|
<hr class="my-5">
|
||||||
<h2 class="mt-4">Donations via PAYPAL</h2>
|
|
||||||
## Donations via PayPal
|
|
||||||
|
|
||||||
If you wish to support the development of SysMVC, consider making a donation via PayPal to:
|
<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>
|
||||||
<h2 class="mt-4">Donations via PAYPAL</h2>
|
<p>
|
||||||
<p>If you wish to support the development of SysMVC, consider making a donation via PAYPAL to <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>
|
<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>
|
||||||
@endsection
|
@endsection
|
||||||
|
|||||||
@@ -31,20 +31,24 @@
|
|||||||
|
|
||||||
<p>Github: <a href="https://github.com/syspanel/SysMVC.git">https://github.com/syspanel/SysMVC.git</a></p>
|
<p>Github: <a href="https://github.com/syspanel/SysMVC.git">https://github.com/syspanel/SysMVC.git</a></p>
|
||||||
|
|
||||||
<br><br>
|
<br><br>
|
||||||
|
|
||||||
<h2 class="mt-4">Contact</h2>
|
<h2 class="mt-4">Contact</h2>
|
||||||
<p>If you're interested in SysMVC, feel free to contact us:</p>
|
<p>If you're interested in SysMVC, feel free to contact us:</p>
|
||||||
<ul>
|
<ul>
|
||||||
<li>Email: <a href="mailto:syspanel@gmx.com">syspanel@gmx.com</a></li>
|
<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>
|
<li>WhatsApp: <a href="https://wa.me/5535992261684" target="_blank">+55 (35) 99226-1684</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
## Donations via PayPal
|
<hr class="my-5">
|
||||||
|
|
||||||
If you wish to support the development of SysMVC, consider making a donation via PayPal to:
|
<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>
|
||||||
<h2 class="mt-4">Donations via PAYPAL</h2>
|
<p>
|
||||||
<p>If you wish to support the development of SysMVC, consider making a donation via PAYPAL to <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>
|
<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>
|
||||||
@endsection
|
@endsection
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
<meta name="author" content="Marco Costa">
|
<meta name="author" content="Marco Costa">
|
||||||
<meta name="description" content="SysMVC - PHP framework for website and app development.">
|
<meta name="description" content="SysMVC - PHP framework for website and app development.">
|
||||||
<meta name="copyright" content="© 2025 Marco Costa" />
|
<meta name="copyright" content="© 2026 Marco Costa" />
|
||||||
<meta name="keywords" content="sites, web, development, framework, php, mit">
|
<meta name="keywords" content="sites, web, development, framework, php, mit">
|
||||||
<meta name="robots" content="index,nofollow">
|
<meta name="robots" content="index,nofollow">
|
||||||
|
|
||||||
@@ -54,7 +54,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<footer class="bg-dark text-white text-center p-3">
|
<footer class="bg-dark text-white text-center p-3">
|
||||||
<p>© 2025 SysMVC 1.0 PHP Framework | <a href="https://opensource.org/licenses/MIT" class="text-white" target="_blank">License: MIT</a></p>
|
<p>© 2026 SysMVC 2.0 PHP Framework | <a href="https://opensource.org/licenses/MIT" class="text-white" target="_blank">License: MIT</a></p>
|
||||||
</footer>
|
</footer>
|
||||||
|
|
||||||
<!-- Bootstrap Scripts -->
|
<!-- Bootstrap Scripts -->
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
<meta name="author" content="Marco Costa">
|
<meta name="author" content="Marco Costa">
|
||||||
<meta name="description" content="SysMVC - PHP Framework for website and app development.">
|
<meta name="description" content="SysMVC - PHP Framework for website and app development.">
|
||||||
<meta name="copyright" content="© 2025 Marco Costa" />
|
<meta name="copyright" content="© 2026 Marco Costa" />
|
||||||
<meta name="keywords" content="websites, web, development, framework, php, mit">
|
<meta name="keywords" content="websites, web, development, framework, php, mit">
|
||||||
<meta name="robots" content="index,nofollow">
|
<meta name="robots" content="index,nofollow">
|
||||||
|
|
||||||
@@ -53,7 +53,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<footer class="bg-dark text-white text-center p-3">
|
<footer class="bg-dark text-white text-center p-3">
|
||||||
<p>© 2025 SysMVC 1.0 PHP Framework | <a href="https://opensource.org/licenses/MIT" class="text-white" target="_blank">License: MIT</a></p>
|
<p>© 2026 SysMVC 2.0 PHP Framework | <a href="https://opensource.org/licenses/MIT" class="text-white" target="_blank">License: MIT</a></p>
|
||||||
</footer>
|
</footer>
|
||||||
|
|
||||||
<!-- Bootstrap Scripts -->
|
<!-- Bootstrap Scripts -->
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
<meta name="author" content="Marco Costa">
|
<meta name="author" content="Marco Costa">
|
||||||
<meta name="description" content="SysMVC - PHP Framework for website and app development.">
|
<meta name="description" content="SysMVC - PHP Framework for website and app development.">
|
||||||
<meta name="copyright" content="© 2025 Marco Costa" />
|
<meta name="copyright" content="© 2026 Marco Costa" />
|
||||||
<meta name="keywords" content="websites, web, development, framework, php, mit">
|
<meta name="keywords" content="websites, web, development, framework, php, mit">
|
||||||
<meta name="robots" content="index,nofollow">
|
<meta name="robots" content="index,nofollow">
|
||||||
|
|
||||||
@@ -53,7 +53,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<footer class="bg-dark text-white text-center p-3">
|
<footer class="bg-dark text-white text-center p-3">
|
||||||
<p>© 2025 SysMVC 1.0 PHP Framework | <a href="https://opensource.org/licenses/MIT" class="text-white" target="_blank">License: MIT</a></p>
|
<p>© 2026 SysMVC 2.0 PHP Framework | <a href="https://opensource.org/licenses/MIT" class="text-white" target="_blank">License: MIT</a></p>
|
||||||
</footer>
|
</footer>
|
||||||
|
|
||||||
<!-- Bootstrap Scripts -->
|
<!-- Bootstrap Scripts -->
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
<div class="container mt-5">
|
<div class="container mt-5">
|
||||||
<h1 class="display-4 text-primary">Twig - Create New Crud Example</h1>
|
<h1 class="display-4 text-primary">Twig - Create New Crud Example</h1>
|
||||||
<form action="/twigexample/store" method="POST">
|
<form action="/twigexample/store" method="POST">
|
||||||
<input type="hidden" name="csrf_token" value="{{ csrf_token }}">
|
{{ csrf()|raw }}
|
||||||
|
|
||||||
<div class="mb-3">
|
<div class="mb-3">
|
||||||
<label for="email" class="form-label">Email:</label>
|
<label for="email" class="form-label">Email:</label>
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
<div class="container mt-5">
|
<div class="container mt-5">
|
||||||
<h1 class="display-4 text-primary">Twig - Create New Crud Example</h1>
|
<h1 class="display-4 text-primary">Twig - Create New Crud Example</h1>
|
||||||
<form action="/twigexample/store" method="POST">
|
<form action="/twigexample/store" method="POST">
|
||||||
<input type="hidden" name="csrf_token" value="{{ csrf_token }}">
|
{{ csrf()|raw }}
|
||||||
|
|
||||||
<div class="mb-3">
|
<div class="mb-3">
|
||||||
<label for="email" class="form-label">Email:</label>
|
<label for="email" class="form-label">Email:</label>
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
<div class="container mt-5">
|
<div class="container mt-5">
|
||||||
<h1 class="display-4 text-primary">Twig - Edit Crud Example</h1>
|
<h1 class="display-4 text-primary">Twig - Edit Crud Example</h1>
|
||||||
<form action="/twigexample/update/{{ twigexample.id }}" method="POST">
|
<form action="/twigexample/update/{{ twigexample.id }}" method="POST">
|
||||||
<input type="hidden" name="csrf_token" value="{{ csrf_token }}">
|
{{ csrf()|raw }}
|
||||||
|
|
||||||
<div class="mb-3">
|
<div class="mb-3">
|
||||||
<label for="name" class="form-label">Name:</label>
|
<label for="name" class="form-label">Name:</label>
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
<div class="container mt-5">
|
<div class="container mt-5">
|
||||||
<h1 class="display-4 text-primary">Twig - Edit Crud Example</h1>
|
<h1 class="display-4 text-primary">Twig - Edit Crud Example</h1>
|
||||||
<form action="/twigexample/update/{{ twigexample.id }}" method="POST">
|
<form action="/twigexample/update/{{ twigexample.id }}" method="POST">
|
||||||
<input type="hidden" name="csrf_token" value="{{ csrf_token }}">
|
{{ csrf()|raw }}
|
||||||
|
|
||||||
<div class="mb-3">
|
<div class="mb-3">
|
||||||
<label for="name" class="form-label">Name:</label>
|
<label for="name" class="form-label">Name:</label>
|
||||||
|
|||||||
@@ -25,14 +25,14 @@
|
|||||||
<td>{{ item.name }}</td>
|
<td>{{ item.name }}</td>
|
||||||
<td>{{ item.company }}</td>
|
<td>{{ item.company }}</td>
|
||||||
<td>
|
<td>
|
||||||
<a href="/twigexample/show/{{ item.id }}" class="btn btn-info btn-sm me-2">View</a>
|
<div class="d-flex">
|
||||||
<a href="/twigexample/edit/{{ item.id }}" class="btn btn-warning btn-sm me-2">Edit</a>
|
<a href="/twigexample/show/{{ item.id }}" class="btn btn-info btn-sm mr-1">View</a>
|
||||||
|
<a href="/twigexample/edit/{{ item.id }}" class="btn btn-warning btn-sm mr-1">Edit</a>
|
||||||
<!-- Delete form -->
|
<form action="/twigexample/delete/{{ item.id }}" method="POST" class="d-inline">
|
||||||
<form action="/twigexample/delete/{{ item.id }}" method="POST" style="display:inline;">
|
{{ csrf()|raw }}
|
||||||
<input type="hidden" name="_method" value="POST">
|
<button type="submit" class="btn btn-danger btn-sm" onclick="return confirm('Are you sure?')">Delete</button>
|
||||||
<button type="submit" class="btn btn-danger btn-sm" onclick="return confirm('Are you sure?')">Delete</button>
|
</form>
|
||||||
</form>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|||||||
@@ -25,14 +25,14 @@
|
|||||||
<td>{{ item.name }}</td>
|
<td>{{ item.name }}</td>
|
||||||
<td>{{ item.company }}</td>
|
<td>{{ item.company }}</td>
|
||||||
<td>
|
<td>
|
||||||
<a href="/twigexample/show/{{ item.id }}" class="btn btn-info btn-sm me-2">View</a>
|
<div class="d-flex">
|
||||||
<a href="/twigexample/edit/{{ item.id }}" class="btn btn-warning btn-sm me-2">Edit</a>
|
<a href="/twigexample/show/{{ item.id }}" class="btn btn-info btn-sm mr-1">View</a>
|
||||||
|
<a href="/twigexample/edit/{{ item.id }}" class="btn btn-warning btn-sm mr-1">Edit</a>
|
||||||
<!-- Delete form -->
|
<form action="/twigexample/delete/{{ item.id }}" method="POST" class="d-inline">
|
||||||
<form action="/twigexample/delete/{{ item.id }}" method="POST" style="display:inline;">
|
{{ csrf()|raw }}
|
||||||
<input type="hidden" name="_method" value="POST">
|
<button type="submit" class="btn btn-danger btn-sm" onclick="return confirm('Are you sure?')">Delete</button>
|
||||||
<button type="submit" class="btn btn-danger btn-sm" onclick="return confirm('Are you sure?')">Delete</button>
|
</form>
|
||||||
</form>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|||||||
@@ -36,7 +36,8 @@
|
|||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
<a href="/twigexample/edit/{{ twigexample.id }}" class="btn btn-warning me-2">Edit</a>
|
<a href="/twigexample/edit/{{ twigexample.id }}" class="btn btn-warning me-2">Edit</a>
|
||||||
<form action="/twigexample/delete/{{ twigexample.id }}" method="POST" style="display:inline;">
|
<form action="/twigexample/delete/{{ twigexample.id }}" method="POST" class="d-inline">
|
||||||
|
{{ csrf() }}
|
||||||
<button type="submit" class="btn btn-danger me-2" onclick="return confirm('Are you sure?')">Delete</button>
|
<button type="submit" class="btn btn-danger me-2" onclick="return confirm('Are you sure?')">Delete</button>
|
||||||
</form>
|
</form>
|
||||||
<a href="/twigexample" class="btn btn-secondary">Back to List</a>
|
<a href="/twigexample" class="btn btn-secondary">Back to List</a>
|
||||||
|
|||||||
@@ -35,9 +35,10 @@
|
|||||||
<td>{{ twigexample.notes }}</td>
|
<td>{{ twigexample.notes }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
<a href="/twigexample/edit/{{ twigexample.id }}" class="btn btn-warning me-2">Edit</a>
|
<a href="/twigexample/edit/{{ twigexample.id }}" class="btn btn-warning mr-2">Edit</a>
|
||||||
<form action="/twigexample/delete/{{ twigexample.id }}" method="POST" style="display:inline;">
|
<form action="/twigexample/delete/{{ twigexample.id }}" method="POST" class="d-inline">
|
||||||
<button type="submit" class="btn btn-danger me-2" onclick="return confirm('Are you sure?')">Delete</button>
|
{{ csrf()|raw }}
|
||||||
|
<button type="submit" class="btn btn-danger mr-2" onclick="return confirm('Are you sure?')">Delete</button>
|
||||||
</form>
|
</form>
|
||||||
<a href="/twigexample" class="btn btn-secondary">Back to List</a>
|
<a href="/twigexample" class="btn btn-secondary">Back to List</a>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user