A super easy PHP Framework for web development!
https://github.com/exacti/phacil-framework
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
306 lines
6.0 KiB
306 lines
6.0 KiB
<?php
|
|
/*
|
|
* Copyright © 2021 ExacTI Technology Solutions. All rights reserved.
|
|
* GPLv3 General License.
|
|
* https://exacti.com.br
|
|
* Phacil PHP Framework - https://github.com/exacti/phacil-framework
|
|
*/
|
|
|
|
namespace Phacil\Framework;
|
|
|
|
use Phacil\Framework\Interfaces\Action as ActionInterface;
|
|
|
|
/** @package Phacil\Framework */
|
|
final class Action implements ActionInterface {
|
|
/**
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $file;
|
|
|
|
/**
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $class;
|
|
|
|
/**
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $method;
|
|
|
|
/**
|
|
*
|
|
* @var array
|
|
*/
|
|
protected $args = array();
|
|
|
|
/**
|
|
*
|
|
* @var (string[]|string|null)[]
|
|
*/
|
|
private $classAlt = [];
|
|
|
|
/**
|
|
* @param string $route
|
|
* @param array $args
|
|
* @return void
|
|
*/
|
|
public function __construct($route, $args = array()) {
|
|
$path = '';
|
|
$pathC = "";
|
|
|
|
$parts = explode('/', str_replace('../', '', (string)$route));
|
|
|
|
foreach ($parts as $part) {
|
|
$pathNew = $path;
|
|
$path .= $part;
|
|
|
|
if (is_dir(DIR_APP_MODULAR . $path)) {
|
|
$path = $path.'/';
|
|
|
|
array_shift($parts);
|
|
|
|
continue;
|
|
}elseif (is_dir(DIR_APP_MODULAR . ucfirst($path))) {
|
|
$path = ucfirst($path).'/';
|
|
|
|
array_shift($parts);
|
|
|
|
continue;
|
|
}elseif (is_dir(DIR_APPLICATION . 'controller/' . $path)) {
|
|
$path .= '/';
|
|
|
|
array_shift($parts);
|
|
|
|
continue;
|
|
}
|
|
|
|
$strReplaceOnPathNew = str_replace('../', '', $pathNew);
|
|
$strReplaceOnPath = str_replace('../', '', $path);
|
|
$strReplaceOnPart = str_replace('../', '', $part);
|
|
$pregReplaceOnPath = preg_replace('/[^a-zA-Z0-9]/', '', $path);
|
|
$pregReplaceOnPart = preg_replace('/[^a-zA-Z0-9]/', '', $part);
|
|
|
|
if (is_file(DIR_APP_MODULAR . $strReplaceOnPathNew . 'Controller/' . $strReplaceOnPart . '.php')) {
|
|
$this->file = DIR_APP_MODULAR . $strReplaceOnPathNew . 'Controller/' . $strReplaceOnPart . '.php';
|
|
|
|
$this->class = 'Controller' . $pregReplaceOnPath;
|
|
|
|
$this->classAlt = [
|
|
'class' => $this->mountClass($strReplaceOnPathNew, $pregReplaceOnPart),
|
|
'legacy' => $this->class,
|
|
'ucfirst' => ucfirst($pregReplaceOnPart),
|
|
'direct' => $pregReplaceOnPart
|
|
];
|
|
|
|
array_shift($parts);
|
|
|
|
break;
|
|
} elseif (is_file(DIR_APP_MODULAR . $strReplaceOnPathNew . 'Controller/' . ucfirst($strReplaceOnPart) . '.php')) {
|
|
$this->file = DIR_APP_MODULAR . $strReplaceOnPathNew . 'Controller/' . ucfirst($strReplaceOnPart) . '.php';
|
|
|
|
$this->class = 'Controller' . $pregReplaceOnPath;
|
|
|
|
$this->classAlt = [
|
|
'class' => $this->mountClass($strReplaceOnPathNew, $pregReplaceOnPart),
|
|
'legacy' => $this->class,
|
|
'ucfirst' => ucfirst($pregReplaceOnPart),
|
|
'direct' => $pregReplaceOnPart
|
|
];
|
|
|
|
array_shift($parts);
|
|
|
|
break;
|
|
} elseif (is_file(DIR_APPLICATION . 'controller/' . $strReplaceOnPath . '.php')) {
|
|
$this->file = DIR_APPLICATION . 'controller/' . $strReplaceOnPath . '.php';
|
|
|
|
$this->class = 'Controller' . $pregReplaceOnPath;
|
|
|
|
$this->classAlt = [
|
|
'class' => $this->mountClass($strReplaceOnPathNew, $pregReplaceOnPart),
|
|
'legacy' => $this->class,
|
|
'ucfirst' => ucfirst($pregReplaceOnPart),
|
|
'direct' => $pregReplaceOnPart
|
|
];
|
|
|
|
array_shift($parts);
|
|
|
|
break;
|
|
}
|
|
}
|
|
|
|
if ($args) {
|
|
$this->args = $args;
|
|
}
|
|
|
|
$method = array_shift($parts);
|
|
|
|
if ($method) {
|
|
$this->method = $method;
|
|
} else {
|
|
$this->method = 'index';
|
|
}
|
|
|
|
}
|
|
|
|
/** @return string */
|
|
public function getFile():string {
|
|
return $this->file;
|
|
}
|
|
|
|
/** @return string */
|
|
public function getClass():string {
|
|
return $this->class;
|
|
}
|
|
|
|
private function mountClass(string $namespace, string $class) {
|
|
return (defined('NAMESPACE_PREFIX') ? NAMESPACE_PREFIX."\\" : "").str_replace("/", "\\", $namespace)."Controller\\".$class;
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @param string $class
|
|
* @return $this
|
|
*/
|
|
public function setClass($class) {
|
|
$this->class = $class;
|
|
return $this;
|
|
}
|
|
|
|
/** @return array */
|
|
public function getClassAlt():array {
|
|
return $this->classAlt;
|
|
}
|
|
|
|
/** @return string */
|
|
public function getMethod():string {
|
|
return $this->method;
|
|
}
|
|
|
|
/** @return array */
|
|
public function getArgs():array {
|
|
return $this->args;
|
|
}
|
|
}
|
|
|
|
|
|
/** @package Phacil\Framework */
|
|
final class ActionSystem implements ActionInterface {
|
|
|
|
/**
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $file;
|
|
|
|
/**
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $class;
|
|
|
|
/**
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $method;
|
|
|
|
/**
|
|
*
|
|
* @var array
|
|
*/
|
|
protected $args = array();
|
|
|
|
/**
|
|
*
|
|
* @var (string[]|string|null)[]
|
|
*/
|
|
private $classAlt = [];
|
|
|
|
/**
|
|
* @param string $route
|
|
* @param array $args
|
|
* @return void
|
|
*/
|
|
public function __construct($route, $args = array()) {
|
|
$path = '';
|
|
|
|
$parts = explode('/', str_replace('../', '', (string)$route));
|
|
|
|
foreach ($parts as $part) {
|
|
$path .= $part;
|
|
|
|
if (is_dir(DIR_SYSTEM . '' . $path)) {
|
|
$path .= '/';
|
|
|
|
array_shift($parts);
|
|
|
|
continue;
|
|
}
|
|
|
|
if (is_file(DIR_SYSTEM . '' . str_replace('../', '', $path) . '.php')) {
|
|
$this->file = DIR_SYSTEM . '' . str_replace('../', '', $path) . '.php';
|
|
|
|
$this->class = 'System' . preg_replace('/[^a-zA-Z0-9]/', '', $path);
|
|
|
|
$this->classAlt = [
|
|
'legacy' => $this->class,
|
|
'direct' => preg_replace('/[^a-zA-Z0-9]/', '', $part)
|
|
];
|
|
|
|
array_shift($parts);
|
|
|
|
break;
|
|
}
|
|
}
|
|
|
|
if ($args) {
|
|
$this->args = $args;
|
|
}
|
|
|
|
$method = array_shift($parts);
|
|
|
|
if ($method) {
|
|
$this->method = $method;
|
|
} else {
|
|
$this->method = 'index';
|
|
}
|
|
}
|
|
|
|
/** @return string */
|
|
public function getFile():string {
|
|
return $this->file;
|
|
}
|
|
|
|
/** @return string */
|
|
public function getClass():string {
|
|
return $this->class;
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @param string $class
|
|
* @return $this
|
|
*/
|
|
public function setClass($class) {
|
|
$this->class = $class;
|
|
return $this;
|
|
}
|
|
|
|
/** @return array */
|
|
public function getClassAlt():array {
|
|
return $this->classAlt;
|
|
}
|
|
|
|
/** @return string */
|
|
public function getMethod():string {
|
|
return $this->method;
|
|
}
|
|
|
|
/** @return array */
|
|
public function getArgs():array {
|
|
return $this->args;
|
|
}
|
|
}
|
|
|