Added: MVC structure, Router, Views and Controllers for home page and login/signup
This commit is contained in:
parent
7b4b349816
commit
3144078860
19
app/controllers/AuthController.php
Normal file
19
app/controllers/AuthController.php
Normal file
@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
class AuthController {
|
||||
public function signin() {
|
||||
$view = new View();
|
||||
$data = [
|
||||
'title' => 'Log In'
|
||||
];
|
||||
$view->render('auth/signin', $data);
|
||||
}
|
||||
|
||||
public function signup() {
|
||||
$view = new View();
|
||||
$data = [
|
||||
'title' => 'Register'
|
||||
];
|
||||
$view->render('auth/signup', $data);
|
||||
}
|
||||
}
|
22
app/controllers/HomeController.php
Normal file
22
app/controllers/HomeController.php
Normal file
@ -0,0 +1,22 @@
|
||||
<?php
|
||||
|
||||
class HomeController {
|
||||
//private function render($view) {
|
||||
// ob_start();
|
||||
// require_once views . $view;
|
||||
// $content = ob_get_clean();
|
||||
// require_once views . 'layouts/base.php';
|
||||
//}
|
||||
public function index() {
|
||||
$view = new View();
|
||||
$data = [
|
||||
'title' => 'Home'
|
||||
];
|
||||
$view->render('home/index', $data);
|
||||
//require_once views . 'home/index.php';
|
||||
}
|
||||
|
||||
public function home() {
|
||||
$this->index();
|
||||
}
|
||||
}
|
9
app/views/auth/signin.php
Normal file
9
app/views/auth/signin.php
Normal file
@ -0,0 +1,9 @@
|
||||
<section class="signin">
|
||||
<form>
|
||||
<label for="username">Username</label>
|
||||
<input type="text" name="username" id="username">
|
||||
<label for="password">Password</label>
|
||||
<input type="password" name="password" id="password">
|
||||
<input type="submit" value="Sign In" id="submit-signin">
|
||||
</form>
|
||||
</section>
|
11
app/views/auth/signup.php
Normal file
11
app/views/auth/signup.php
Normal file
@ -0,0 +1,11 @@
|
||||
<section class="signup">
|
||||
<form>
|
||||
<label for="username">Username</label>
|
||||
<input type="text" name="username" id="username">
|
||||
<label for="password">Password</label>
|
||||
<input type="password" name="password" id="password">
|
||||
<label for="password-2">Password again</label>
|
||||
<input type="password" name="password-2" id="password-2">
|
||||
<input type="submit" value="Sign Up" id="submit-signup">
|
||||
</form>
|
||||
</section>
|
0
app/views/dashboard/index.php
Normal file
0
app/views/dashboard/index.php
Normal file
13
app/views/errors/404.php
Normal file
13
app/views/errors/404.php
Normal file
@ -0,0 +1,13 @@
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Habit Tracker | Error 494</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Error 404 - Page not found</h1>
|
||||
<a href="/">Go back home</a>
|
||||
</body>
|
||||
</html>
|
0
app/views/habits/create.php
Normal file
0
app/views/habits/create.php
Normal file
0
app/views/habits/edit.php
Normal file
0
app/views/habits/edit.php
Normal file
4
app/views/home/index.php
Normal file
4
app/views/home/index.php
Normal file
@ -0,0 +1,4 @@
|
||||
<div>
|
||||
<h1>Welcome to Habit Tracker!</h1>
|
||||
<p>Track your habits and achieve your goals.</p>
|
||||
</div>
|
16
app/views/layouts/base.php
Normal file
16
app/views/layouts/base.php
Normal file
@ -0,0 +1,16 @@
|
||||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Habit Tracker | <?= $data['title'] ?></title>
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
<a href="/auth/signin">Log In</a>
|
||||
<a href="/auth/signup">Sign Up</a>
|
||||
</header>
|
||||
<section class="content">
|
||||
<?= $content ?>
|
||||
</section>
|
||||
</body>
|
||||
</html>
|
0
app/views/shared/footer.php
Normal file
0
app/views/shared/footer.php
Normal file
4
app/views/shared/header.php
Normal file
4
app/views/shared/header.php
Normal file
@ -0,0 +1,4 @@
|
||||
<header>
|
||||
<a href="/signin">Log In</a>
|
||||
<a href="/signup">Sign Up</a>
|
||||
</header>
|
0
core/Controller.php
Normal file
0
core/Controller.php
Normal file
28
core/Router.php
Normal file
28
core/Router.php
Normal file
@ -0,0 +1,28 @@
|
||||
<?php
|
||||
|
||||
class Router {
|
||||
private $routes = [];
|
||||
|
||||
public function add($route, $action) {
|
||||
$this->routes[$route] = $action;
|
||||
}
|
||||
|
||||
public function dispatch() {
|
||||
$uri = $_SERVER['REQUEST_URI'];
|
||||
$uri = parse_url($uri, PHP_URL_PATH);
|
||||
|
||||
if (array_key_exists($uri, $this->routes)) {
|
||||
$action = $this->routes[$uri];
|
||||
list($controllerName, $methodName) = explode('@', $action);
|
||||
|
||||
require_once controllers . "{$controllerName}.php";
|
||||
|
||||
$controller = new $controllerName();
|
||||
$controller->$methodName();
|
||||
} else {
|
||||
http_response_code(404);
|
||||
$view = new View();
|
||||
$view->render('errors/404');
|
||||
}
|
||||
}
|
||||
}
|
17
core/View.php
Normal file
17
core/View.php
Normal file
@ -0,0 +1,17 @@
|
||||
<?php
|
||||
class View
|
||||
{
|
||||
public function render($view, $data = [], $layout = 'base')
|
||||
{
|
||||
// Extract variables to be accessible in the view
|
||||
extract($data);
|
||||
|
||||
// Capture the view content
|
||||
ob_start();
|
||||
require_once views . $view . '.php';
|
||||
$content = ob_get_clean();
|
||||
|
||||
// Include the base layout and inject the view content
|
||||
require_once views . "layouts/$layout.php";
|
||||
}
|
||||
}
|
23
public/index.php
Normal file
23
public/index.php
Normal file
@ -0,0 +1,23 @@
|
||||
<?php
|
||||
// Show errors and warnings
|
||||
ini_set('display_errors', '1');
|
||||
ini_set('log_errors', '1');
|
||||
ini_set('error_log', '../storage/logs/error_log.log');
|
||||
|
||||
define('models', __DIR__ . '/../app/models/');
|
||||
define('views', __DIR__ . '/../app/views/');
|
||||
define('controllers', __DIR__ . '/../app/controllers/');
|
||||
|
||||
require_once '../core/Router.php';
|
||||
require_once '../core/View.php';
|
||||
require_once '../core/Controller.php';
|
||||
|
||||
// Initialize router
|
||||
$router = new Router();
|
||||
$router->add('/', 'HomeController@index');
|
||||
$router->add('/home', 'HomeController@home');
|
||||
|
||||
// auth routes
|
||||
$router->add('/auth/signin', 'AuthController@signin');
|
||||
$router->add('/auth/signup', 'AuthController@signup');
|
||||
$router->dispatch();
|
1
storage/logs/.gitignore
vendored
Normal file
1
storage/logs/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
*.log
|
Loading…
Reference in New Issue
Block a user