backend — простой аргумент маршрутизатора PHP, передаваемый в представления

Я создаю базовый маршрутизатор на PHP, в Интернете не так много материалов о том, как написать простой PHP-маршрутизатор. Итак, ниже моя текущая реализация. В основном каждый запрос перенаправляется в index.php, а затем с помощью маршрутизатора класса перенаправляет пользователя в home.php или add.php. Вопрос в том, как передать переменную любого типа из index.php в home.php или add.php?

<?php
//***********************
// Router class
//*********************
class router
{
public $req = [];
public $url = "";
public $method = "";
private $url_found = false;

public function resolve($url)
{
$this->url = $url["REDIRECT_URL"];
$this->request = $url;
$this->method = $url["REQUEST_METHOD"];
}

public function get($route, $callback)
{
if ($this->method == "GET" && $this->url == $route && $this->url_found == false) {
$url_found = true;
$callback($this->req);
}
}

public function post($route, $callback)
{
if ($this->method == "POST" && $this->url == $route && $this->url_found == false) {
$url_found = true;
$callback($this->req);
}
}
}



<?php
//*******************************
// index.php
//*********************************


require './router.php';

$app = new router();

$app -> resolve($_SERVER);

$app -> get("/home", function ($req)
{
require 'views/home.php';
});

$app -> get("/add", function ($req)
{
require 'views/add.php';
});

$app -> post("/add", function ($req)
{
require 'views/home.php';
});

Моя идея состояла в том, что мне нужно сохранить данные, которые я хочу передать в некоторую глобальную переменную, и, если я запрашиваю, скажем, «views / home.php», home.php будет иметь доступ к этой глобальной переменной и может использовать ее.

Файловая система проекта:

+---php_router
|   |   .htaccess
|   |   index.php
|   |   notes.md
|   |   router.php
|   |
|   \---views
|           add.php
|           home.php

0

Решение

Глобальная переменная будет работать, потому что require не перенаправляет, но так как вы находитесь в области действия функции, вам нужно будет перечислить эти глобальные переменные для общего доступа к ним, но я не уверен, что это хорошая идея

// index.php

$var = 'global';

...

$app -> get("/home", function ($req)
{
global $var;
require 'views/home.php';
});

...

// home.php

var_dump($var);
var_dump($req);

лучше подход ООП и передача данных через параметры

редактировать:
если вы спросите, как передать переменную между файлами, то все в порядке, дело в том, что когда вы посмотрите на файл кода представления, через некоторое время вы не будете знать, откуда переменная приходит, и это заставляет вас читать больше исходных файлов. (IDE не скажет вам, где определена переменная).

учти это:

$app -> get("/home", function ($req)
{
global $var;
require 'views/home.php';
$view = new Home($var);
});

class Home {
private $var;
public function __construct($var){
$this->var = $var;
}
public function render(){
echo $this->var;
}
}

с этой точки зрения вы сразу видите, что существует переменная var и что она исходит из конструктора, без путаницы, единственный способ передачи переменной — это создание объекта, которое гораздо проще найти, и IDE скажет вам, где

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector