1. Go to this page and download the library: Download neuron-php/mvc library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
neuron-php / mvc example snippets
ootstrap the application
$app = boot('../config');
// Dispatch the current request
dispatch($app);
namespace App\Controllers;
use Neuron\Mvc\Controllers\Base;
use Neuron\Mvc\Responses\HttpResponseStatus;
class HomeController extends Base
{
public function index(): string
{
return $this->renderHtml(
HttpResponseStatus::OK,
['title' => 'Welcome'],
'index', // view file
'default' // layout file
);
}
}
use Neuron\Routing\Attributes\Get;
use Neuron\Routing\Attributes\Post;
use Neuron\Routing\Attributes\RouteGroup;
#[RouteGroup(prefix: '/api', filters: ['auth'])]
class UserController extends Base
{
#[Get('/user/:id', name: 'user_profile')]
public function profile(Request $request): string
{
$userId = $request->getRouteParameter('id');
// ...
}
#[Post('/users', name: 'api_users', filters: ['csrf'])]
public function create(Request $request): string
{
// ...
}
}
public function profile(Request $request): string
{
$dto = $request->getDto();
$userId = $dto->id;
// ...
}
class UserController extends Base
{
public function show($id): string
{
$user = User::find($id);
// Magic methods for URL generation
$editUrl = $this->userEditPath(['id' => $id]);
$absoluteUrl = $this->userProfileUrl(['id' => $id]);
// Use in redirects
if (!$user) {
return redirect($this->userIndexPath());
}
return $this->renderHtml(HttpResponseStatus::OK, [
'user' => $user,
'edit_url' => $editUrl
]);
}
public function create(): string
{
// After creating user, redirect using magic method
$user = new User($request->all());
$user->save();
return redirect($this->userProfilePath(['id' => $user->id]));
}
}
// Generate relative URLs
$profileUrl = $this->urlFor('user_profile', ['id' => 123]);
// Generate absolute URLs
$absoluteUrl = $this->urlForAbsolute('user_profile', ['id' => 123]);
// Check if route exists
if ($this->routeExists('user_profile')) {
// Route is available
}
// Get UrlHelper instance for advanced usage
$urlHelper = $this->urlHelper();
// Get all available routes for debugging
$routes = $urlHelper->getAvailableRoutes();
foreach ($routes as $route) {
echo "Route: {$route['name']} -> {$route['method']} {$route['path']}\n";
}
// Custom UrlHelper instance
$customHelper = new UrlHelper($customRouter);
namespace App\Controllers;
use Neuron\Mvc\Controllers\Base;
use Neuron\Mvc\Requests\Request;
use Neuron\Mvc\Responses\HttpResponseStatus;
class ProductController extends Base
{
public function list(): string
{
$products = $this->getProducts();
return $this->renderHtml(
HttpResponseStatus::OK,
['products' => $products],
'list',
'default'
);
}
public function apiList(): string
{
$products = $this->getProducts();
return $this->renderJson(
HttpResponseStatus::OK,
['products' => $products]
);
}
public function details(Request $request): string
{
$id = $request->getRouteParameter('id');
$product = $this->getProduct($id);
if (!$product) {
return $this->renderHtml(
HttpResponseStatus::NOT_FOUND,
['message' => 'Product not found'],
'error',
'default'
);
}
return $this->renderHtml(
HttpResponseStatus::OK,
['product' => $product],
'details',
'default'
);
}
}
// Custom 404 handler
class NotFoundController extends HttpCodes
{
public function render404(): string
{
return $this->renderHtml(
HttpResponseStatus::NOT_FOUND,
['message' => 'Page not found'],
'404',
'error'
);
}
}
// Cache is automatically used when enabled
$html = $this->renderHtml(
HttpResponseStatus::OK,
$data,
'cached-view',
'layout'
);
use Neuron\Mvc\Cache\Storage\CacheStorageFactory;
// Create storage based on configuration
$storage = CacheStorageFactory::create([
'storage' => 'redis',
'redis_host' => 'localhost',
'redis_port' => 6379,
'redis_database' => 0,
'redis_prefix' => 'neuron_cache_'
]);
// Auto-detect best available storage
$storage = CacheStorageFactory::createAutoDetect();
// Check storage availability
if (CacheStorageFactory::isAvailable('redis')) {
echo "Redis cache is available";
}
namespace App\Views;
use Neuron\Mvc\Views\IView;
class PdfView implements IView
{
public function render(array $Data): string
{
// Generate PDF content
return $pdfContent;
}
}
use Neuron\Routing\Attributes\Get;
class HomeController extends Base
{
// Public page - no rate limiting
#[Get('/', name: 'home')]
public function index(Request $request): string
{
// ...
}
}
class UserController extends Base
{
// Standard protected route with rate limiting
#[Get('/user/profile', name: 'user_profile', filters: ['rate_limit'])]
public function profile(Request $request): string
{
// Apply rate_limit (100/hour)
// ...
}
}
class ApiController extends Base
{
// API endpoint with higher limits
#[Get('/api/users', name: 'api_users', filters: ['api_limit'])]
public function users(Request $request): string
{
// Apply api_limit (1000/hour)
// ...
}
}
use Neuron\Routing\Attributes\Post;
use Neuron\Routing\Attributes\Get;
class AuthController extends Base
{
#[Post('/auth/login', name: 'login', filters: ['rate_limit'])]
public function login(Request $request): string
{
// Strict limit for login attempts
// ...
}
}
class ApiController extends Base
{
#[Get('/api/data', name: 'api_data', filters: ['api_limit'])]
public function getData(Request $request): string
{
// Higher limit for API access
// ...
}
}