O plano que uso no Hostinger é de hospedagem de site, ou seja, não dá para usar o npm. Por outro lado, o meu projeto não precisa do npm.
Todos os códigos foram feitos na unha. A única coisa que não é minha é o arquivo router.php que coloquei na pasta Controllers. Eu copiei do Bard.
O código a seguir funciona no computador local, mas você precisa ativar o servidor do PHP assim:
php -S localhost:8000
No navegador, você escreve localhost:8000
O servidor vai buscar o index.php, o index.php vai passar todo o comando para o router, e o router é que faz todo o espetáculo do MVC acontecer. Assim, eu acho que o correto é chamar o MVC de MVC-r, sem o router o MVC não faz o menor sentido. Agora, como fazer isso funcionar no Hostinger, isso é um problema bem sério. Se eu não conseguir, o jeito é abandonar o MVC-r para sempre.
index.php
<?php
require'Controllers/router.php';
$router=newRouter();
$router->run();=================================================================Views/menu.php
<!DOCTYPE html><html lang="en"><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"/><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>projeto php</title><link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous"><script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/js/bootstrap.bundle.min.js" integrity="sha384-w76AqPfDkMBDXo30jS1Sgez6pr3x5MlQ1ZAGC+nuZB+EYdgRZgiwxhTBTkF7CXvN" crossorigin="anonymous"></script><script>var lçto ="";var descrição =""function lançar(id,jd){lçto=id; descrição=jd;}function registro(id,jd){eleconta=document.getElementById(lçto);
eledescrição = document.getElementById(descrição); eleconta.value=id; eledescrição.innerHTML=jd;}</script><style>
a:link,a:visited{text-decoration:none;color:blue}
a:hover{text-decoration:underline;color:#f00}
a:active{text-decoration:none}
body{margin:auto;max-width:500px}.desktop{display: none;position:fixed;overflow:auto;background:lightgray}
form{margin:0}.desktop2 {display:none;background-color:lightblue;position:fixed;z-index:1;left:30%;top:10%;
padding:10px;width:40%;height:85%;overflow:auto;}.flutua{position:relative;left:80%}.linha{line-height:0px;min-height:0px;height:0px}.linha2{line-height:20px;min-height:20px;height:20px}.linha3{line-height:10px;min-height:10px;height:10px;font-size:12}.menu {position: relative;display: block;left:1%}.menu2 {position:relative;z-index:2}.movel {display:none; position:fixed; background-color:lightgray; border:1px solid;top:10;left:10}.movel2 {display:none;background-color:lightgray;position:fixed;z-index:1;left:10%;top:10%}.se {display:flex}
summary{list-style:none}
td{white-space: nowrap}</style><header id=cabecalho class="navbar navbar-light sticky-top bg-light flex-md-nowrap p-0">Projeto PHP
<div class="dropdown"><button type="button"class="btn btn-outline-primary dropdown-toggle" data-bs-toggle="dropdown" id=btmenu>Menu<?=Date('H:i')?></button><ulclass="dropdown-menu"><li><aclass="dropdown-item"href=orcamento>Orçamento</a></li></ul></div></header>
==============================================================================================================
Views/login.php
<!DOCTYPE html><htmllang="en"><metahttp-equiv="Content-Type"content="text/html; charset=UTF-8"><metaname="viewport"content="width=device-width, initial-scale=1"><title>Projeto PHP</title><linkhref="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css"rel="stylesheet"integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD"crossorigin="anonymous"><style>
html,body {height:100%}
body {display: flex;align-items: center;padding-top:40px;padding-bottom:40px;background-color:#f5f5f5;}.form-signin {max-width:330px;padding:15px;}.form-signin .form-floating:focus-within {z-index:2;}</style><bodyclass="text-center"><mainclass="form-signin w-100 m-auto"><formmethod=post><h1class="h3 mb-3 fw-normal">Projeto PHP</h1><div><?=$mensagem?></div><divclass="form-floating">
<input type="email" class="form-control" name=email
placeholder="name@example.com" value='<?=$value?>' autofocus required>
<labelfor="floatingInput">Email</label></div><divclass="form-floating"><inputtype="password"class="form-control"id="floatingPassword"placeholder="Senha"name="senha"required><labelfor="floatingPassword">Senha</label></div><buttonclass="w-100 btn btn-lg btn-primary"type="submit">Entrar</button></form></main></body></html>
=================================================================================================================
Models/conexao.php
<?php
class conexao{private $conexao;function __construct(){
$host='localhost';
$user='root';
$password='';
$db='laravel';
$this->conexao=new mysqli($host,$user,$password,$db);return $this->conexao;}function root(){return $_SERVER['DOCUMENT_ROOT']."/astudy/";}function consulta($sql){// retorna vários registrostry{$query=$this->conexao->query($sql);
$rows=$query->fetch_all(MYSQLI_ASSOC);return $rows;}catch(Exception $e){echo $e->getMessage();exit;}}function unico($sql){// retorna um registro
$rows=$this->consulta($sql);if($rows==null){return0;}return $rows[0];}function atualiza($sql){try{$this->conexao->query($sql);}catch(Exception $e){echo $e->getMessage();exit;}}function render($viewName, $data =[]){
$viewFile=realpath('.')."/Views/$viewName.php";
extract($data);require $viewFile;}}=============================================================================Controllers/router.php
<?php
classRouter{private $routes =[],$controle;publicfunction __construct(){require'Controllers/controle.php';
$this->controle=new controle();
$this->addRoute('GET','/',function(){
$this->controle->inicio();});
$this->addRoute('POST','/',function(){
$this->controle->login();});
$this->addRoute('GET','/orcamento',function(){
$this->controle->orcamento();});}publicfunction addRoute($method, $path, $handler){// $method is the HTTP method (e.g., GET, POST, PUT, DELETE)// $path is the route path (e.g., '/', '/about', '/contact')// $handler is the route handler (a callable function or object)
$this->routes[$method][$path]= $handler;}publicfunction run(){// Get the current request method and path
$method = $_SERVER['REQUEST_METHOD'];
$path = $_SERVER['REQUEST_URI'];// Find the matching route
$route = $this->routes[$method];if(!array_key_exists($path, $route)){thrownewException('No route found for method '. $method .' and path '. $path);}// Call the route handler
$handler = $route[$path];
$handler();}}=============================================================================Controllers/controle.php
<?php
class controle{private $conexao;publicfunction __construct(){
require_once 'Models/conexao.php';
$this->conexao=new conexao();return $this->conexao;}publicfunction inicio(){
date_default_timezone_set('America/Sao_Paulo');
$inicio=date('H:i');return $this->conexao->render('login',['mensagem'=>$inicio,'value'=>'']);}publicfunction login(){
$email=$_POST['email'];
$senha=$_POST['senha'];
unset($_POST);
$row=$this->conexao->unico("select * from users where email='$email'");if(!$row||$row==0){
$this->conexao->render('login',["mensagem"=>"Email $email incorreto!","value"=>$email]);exit;}
$dbSenha=$row['password'];if(!password_verify($senha,$dbSenha)){
$this->conexao->render('login',['mensagem'=>'Senha incorreta!','value'=>$email]);exit;}
session_start();
$_SESSION['nome']=$row['name'];
$_SESSION['id']=$row['id'];
unset($_GET);
$this->conexao->render('menu');exit;}publicfunction orcamento(){
echo "projeto em andamento...";}}
Pergunta
Frank K Hosaka
O plano que uso no Hostinger é de hospedagem de site, ou seja, não dá para usar o npm. Por outro lado, o meu projeto não precisa do npm.
Todos os códigos foram feitos na unha. A única coisa que não é minha é o arquivo router.php que coloquei na pasta Controllers. Eu copiei do Bard.
O código a seguir funciona no computador local, mas você precisa ativar o servidor do PHP assim:
php -S localhost:8000
No navegador, você escreve localhost:8000
O servidor vai buscar o index.php, o index.php vai passar todo o comando para o router, e o router é que faz todo o espetáculo do MVC acontecer. Assim, eu acho que o correto é chamar o MVC de MVC-r, sem o router o MVC não faz o menor sentido. Agora, como fazer isso funcionar no Hostinger, isso é um problema bem sério. Se eu não conseguir, o jeito é abandonar o MVC-r para sempre.
Link para o comentário
Compartilhar em outros sites
1 resposta a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.