bhaswanth53 / ynotphp
YNOTPHP 框架版本 1.0
Requires
- altorouter/altorouter: 1.1.0
- defuse/php-encryption: ^2.2
- phpmailer/phpmailer: ^6.1
This package is auto-updated.
Last update: 2024-09-22 23:00:11 UTC
README
YNOTPHP 是一个轻量级的 PHP 框架,旨在使开发者的生活更轻松。与 Laravel、Codeigniter 等所有现代框架不同,它不包含任何会混淆开发者的核心。这意味着整个结构完全掌握在开发者手中。
服务器要求
YNOTPHP 框架具有以下一些要求。
- PHP >= 5.6
- Composer
- MySql PHP 扩展
- PDO PHP 扩展
- Fileinfo PHP 扩展
- XML PHP 扩展
入门
安装
您可以直接从以下 GitHub URL 下载框架:https://github.com/bhaswanth53/ynotphp
或者
如果您的系统上安装了 Git,您可以使用以下命令进行安装。
git clone https://github.com/bhaswanth53/ynotphp.git
一旦您下载了框架,首先您需要使用以下命令在您的命令行界面安装包。
composer install
安装包安装完成后,您需要使用以下命令生成您唯一的 APP_KEY。
./vendor/bin/generate-defuse-key
上述命令将生成如下哈希 APP_KEY。
def000009eaeb386dcee38dacd38e1eea8cb710d2944920e7138738f8297c8d284978bb2b3a79701e6202c0d6a5561eb50e87e914fcf345ad768594788fa387bbbd0ee74
您需要将您的应用密钥添加到您的 env.php 文件中,如下所示。
"APP_KEY" => "def000009eaeb386dcee38dacd38e1eea8cb710d2944920e7138738f8297c8d284978bb2b3a79701e6202c0d6a5561eb50e87e914fcf345ad768594788fa387bbbd0ee74"
如果您从根目录使用框架,您需要在 env.php 中设置 APP_PATH,如下所示。
"APP_PATH" => "",
或者如果您从任何子目录使用框架,您需要配置该子目录路径,如下所示。
"APP_PATH" => "/folder/subfolder",
完成这些操作后,您的安装将完成,您将被重定向到主页。
配置
公共目录
安装 YNOTPHP 后,您应该将您的 Web 服务器的文档 / Web 根目录配置为公共目录。此目录中的 index.php 作为所有进入您应用的 HTTP 请求的前端控制器。
环境变量
此框架中的所有环境变量都将配置在 env.php 文件中。
YNOTPHP 默认包含以下变量。
APP_NAME:这是您项目的名称。
"APP_NAME" => "YNOTPHP",
APP_PATH:这是应用路径。
"APP_PATH" => "/test/ynotphp",
APP_KEY:这是应用的唯一密钥,将在所有涉及安全的交易中使用。
"APP_KEY" => "def000009eaeb386dcee38dacd38e1eea8cb710d2944920e7138738f8297c8d284978bb2b3a79701e6202c0d6a5561eb50e87e914fcf345ad768594788fa387bbbd0ee74",
APP_DEBUG:这将调试您的应用并将错误记录到 logs 文件夹中。
"APP_DEBUG" => true,
注意:默认情况下它是开启的,但在生产模式下您可以将它设置为 false。
APP_MODE:这是应用的模式。最初 YNOTPHP 支持以下 3 种模式。
- 开发
- 测试
- 生产
默认模式设置为 开发。
"APP_MODE" => "development",
配置目录
配置目录包含 3 个不同的文件夹。
- 开发
- 测试
- 生产
每个文件夹包含 3 个不同的文件。
- db.php
- mail.php
- env.php
您可以在不同的模式下配置不同的数据库和邮件配置。
例如,如果您将 APP_MODE 设置为 测试,则将使用测试文件夹中的数据库和邮件配置。
路由
YNOTPHP中的所有路由都将配置在web.php中。YNOTPHP使用AltoRouter进行路由。因此,您可以利用其所有功能。但YNOTPHP采用了最新的MVC架构,并带有路由器,因此您可以直接从路由器定义控制器方法,如下所示。
// Method, URL, Controller, Name $router->map('GET', '/', 'Controllers\\HomeController@home', 'home');
要定义动态路由和URL参数,您可以查看AltoRouter的文档。
控制器
您不必在路由文件中定义所有的请求处理逻辑,您可能希望使用控制器类来组织这种行为。控制器可以将相关的请求处理逻辑组织到一个类中。控制器存储在app/Controllers目录中。
定义控制器
下面是一个基本控制器类的示例。请注意,该控制器扩展了YNOTPHP中包含的基本控制器类。基本类提供了一些便利方法,这些方法可用于控制器操作
<?php namespace Controllers; class HomeController extends Controller { public function home() { // render view return $this->render("home"); } }
您可以这样定义到该控制器操作的路径
$router->map('GET', '/', 'Controllers\\HomeController@home', 'home');
视图
视图包含您的应用程序提供的HTML,将控制器/应用程序逻辑与您的表示逻辑分离。视图存储在Views目录中。一个简单的视图可能看起来像这样
<html> <body> <h1>Hello, <?php echo $variable ?></h1> </body> </html>
视图将通过在控制器中定义的render方法进行渲染。
public function home() { return $this->render("home"); }
在上述代码中,将在Views目录中渲染home.php。如果视图在Views目录中的某个文件夹中,则可以像下面这样调用它。
public function home() { return $this->render("site.home"); }
然后它将查找Views/site/home.php。
传递数据到视图
您可以从控制器将字符串和数组传递给视图,如下所示。
public function about() { $name = "YNOTPHP"; $study = "10"; $data = array('args' => $args, "name" => $name, "study" => $study); return $this->render("about", compact('name', 'study', 'data')); }
然后我们可以在视图中正常输出变量,如下所示。
<?php echo $name; ?>
更好的模板
您可以将视图文件包含在另一个文件中,就像Laravel blade模板一样。
<?php parseview('layouts.site.header'); ?> // Reset of the view code
上述代码将在当前文件中包含Views/layouts/site/header.php。
模型
模型是数据库表的表示。控制器将通过模型访问数据库。在YNOTPHP中,我们可以像下面这样定义模型。
<?php // Define the namespace namespace Models; // use the DB Facade use Facades\DB; class User extends Model { public function model_function() { // Add the query } }
模型使用PDO语句与数据库交互。
public function update_profile_by_email($uemail, $name, $mobile, $state, $district, $city) { $db = DB::open(); $sql = "UPDATE users SET name=?, mobile=?, state=?, district=?, city=? WHERE email=?"; $query = $db->stmt_init(); if($query = $db->prepare($sql)) { $query->bind_param('ssssss', $name, $mobile, $state, $district, $city, $uemail); $query->execute(); $query->close(); } return true; }
public function get_all() { $data = array(); $db = DB::open(); $sql = "SELECT id, id_num, name, email, mobile, state, district, city, active, created_at FROM users ORDER BY id DESC"; $query = $db->stmt_init(); if($query = $db->prepare($sql)) { $query->execute(); $query->store_result(); $query->bind_result($id, $id_num, $name, $email, $mobile, $state, $district, $city, $active, $created); $numrows = $query->num_rows; if($numrows > 0) { while($query->fetch()) { $data[] = array( "id" => $id, "id_num" => $id_num, "name" => $name, "email" => $email, "mobile" => $mobile, "state" => $state, "district" => $district, "city" => $city, "active" => $active, "created_at" => $created ); } } $query->close(); } return $data; }
我们可以在控制器中使用模型,如下所示。
use Models\User;
一旦模型包含在控制器中,我们就可以使用模型中的所有方法。
public function users() { // get all the users as array $users = User::get_all(); return $this->render('admin.users', compact('users')); }
我们也可以在视图中通过直接调用模型来使用模型。
$users = Models\User::get_all()
外观
外观是为了优化典型功能所需的代码而开发的,就像Laravel一样。默认情况下,YNOTPHP附带6种类型的外观。那些是
- 邮件
- 请求
- 验证
- 加密
- 数据库
- 文件
让我们快速了解一下这些外观是用来做什么的。
邮件
邮件外观用于发送电子邮件。您可以在控制器中使用此外观发送电子邮件。要使用邮件外观,我们首先必须在控制器中调用它。
use Facades\Mail;
一旦外观被使用,我们就可以自由地使用它。首先,我们需要在配置目录中的当前模式下配置mail.php。
如果您正在以开发模式使用应用程序,那么您需要在config/development/mail.php文件中配置邮件服务器。
return array( "MAIL_DRIVER" => "", "MAIL_HOST" => "", "MAIL_PORT" => "", "MAIL_USERNAME" => "", "MAIL_PASSWORD" => "", "MAIL_ENCRYPTION" => "" );
一旦配置完成,我们就可以自由地发送电子邮件。
$mail = new Mail(); // We can add multiple senders using the method. $mail->addSender("sender@gmail.com", "Sender Name"); $mail->addReceiver("receiver@gmail.com", "Receiver Name"); $mail->subject = "This is the subject"; // Body will look into mails folder inside views folder. The view file will execute is views/mails/view_name.php $mail->body = "view_name"; // We can send arguments to the view file. $mail->args = array( "url" => "This is a url parameter", "name" => "YNOTPHP" ); try { $mail->send(); return $this->back(); // It will return to the back page. } catch(Exception $e) { echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}"; }
我们可以使用$args从邮件视图中接收动态参数。
<?php echo $args['url']; ?> <?php echo $args['name']; ?>
请求
请求外观用于获取表单数据或URL参数。请求外观是在处理动态网站时使用的重要外观。
use Facades\Request;
请求外观将在如下所示的控制器中使用。
$request = new Request(); $token = $request->input("reset_token"); $password = $request->secure_input("password"); $confirm_password = $request->secure_input("confirm_password");
请求外观包含以下方法。
input()
此方法将用于在不使用任何过滤器的情况下正常获取表单数据。
$name = $request->input("input_name")
get()
此方法用于获取使用GET方法发送的数据或来自URL参数的数据。
$id = $request->get("id")
ajax()
此方法用于获取使用ajax POST请求发送的表单数据。
$name = $request->ajax("input_name")
secure_input()
此方法用于通过过滤恶意字符以安全模式获取表单数据。
$name = $request->secure_input("input_name")
secure_get()
此方法用于以安全模式获取URL参数中的数据。
$id = $request->secure_get("id")
secure_ajax()
此方法用于以安全模式获取ajax POST请求中的数据。
$name = $request->secure_ajax("input_name")
password_check()
此方法用于验证密码。它检查密码是否符合以下条件。
- 最小长度:10
- 最大长度:32
- 必须包含至少一个大写字母、一个小写字母、一个数字和一个特殊字符。
if($request->password_check($password)) { // Password is valid } else { // Not valid }
hash()
此方法用于对密码等字符串进行哈希处理。
$hashed_password = $request->hash($password);
verify_hash()
此方法用于验证哈希字符串与普通字符串。
if($request->verify_hash($string, $hashed_string)) { // hash verified } else { // hash not verified }
all()
此方法用于通过传递请求名称从请求中获取所有数据。
$get_data = $request->all("get") // Returns all data from get method. $post_data = $request->all("post") // Returns all data from post method. $ajax_data = $request->all("ajax") // Returns all data from ajax request.
验证
验证外观用于验证表单数据。您可以从控制器中使用外观。
use Facades\Validation;
$request = new Request(); $email = $request->secure_input("email"); $password = $request->secure_input("password"); // Create validation instance $validation = new Validation(); // Check email required. $validation->name("email")->value($email)->required(); // Check password required $validation->name("password")->value($password)->required(); // Check validation result if($validation->isSuccess()) { // Validation is success } else{ // Validation fails return $this->back(); }
YNOTPHP已采用来自davidecesarano/Validation库的验证插件。它提供灵活的功能和开发者友好的功能。请检查官方库存储库中的完整文档。
加密
加密外观用于加密和解密字符串。通常它将使用您唯一的APP_KEY进行加密和解密。
YNOTPHP已采用defuse/php-encryption库以获得更好的安全性。
我们可以在控制器中如下使用此外观。
use Facades\Crypt;
一旦包含,我们就可以开始加密和解密字符串。
public function encrypt() { $string = "YNOTPHP"; // Encrypt string $encrypted_string = Crypt::encrypt($string); // Decrypt string $decrypted_string = Crypt::decrypt($encrypted_string); }
文件
文件外观用于在服务器上存储文件。它将从POST请求中收集文件并将其用于上传到服务器。
use Facades\File;
一旦包含外观,我们就可以在控制器内部自由使用此外观。
public function addimage() { // Create file instance $file = new File(); // Get file by input name $image = $file->get("image"); // Create a new name for the uploaded file. // If you don't give any new name it will upload using its current name. $name = "gallery_".time(); // Upload file // $file->upload(file, path, new_name) // If file has been uploaded, then it will return its name. $name = $file->upload($image, "images", $name); if($name) { // Uploaded successfully } else { // Not uploaded } }
YNOTPHP将文件上传到public/storage目录。
使用此外观,我们可以使用validateImageSizes方法验证图像大小。
public function image() { $file = new File(); $image = $file->get("image"); // $file->validateImageSizes(image, width(px), height(px)) if($file->validateImageSizes($image, 100, 250)) { // Validation passed } else { // Validation fails } }
数据库
DB外观用于探索数据库连接。它将用于模型中连接数据库。
namespace Models; use Facades\DB; class Tag { public $table = "tags"; public function create($page, $tag) { // Open connection $db = DB::open(); // Write query $sql = "INSERT INTO tags (page, tag) VALUES (?, ?)"; // Execute query $query = $db->stmt_init(); $query = $db->prepare($sql); if($query) { $query->bind_param('is', $page, $tag); $query->execute(); // Close connection $query->close(); return true; } return false; } }
DB外观使用mysqli类打开数据库连接。但开发人员可以在模型中自由使用任何类型的连接,而无需使用外观。
辅助函数
辅助函数是开发出来的以减少复杂功能编码时间。
以下是列出的辅助函数
配置
env()
此函数用于从env.php获取变量。
$keyAscii = env('APP_KEY');
db()
此函数用于从当前配置在env.php中的当前模式获取db.php中的变量。
$dbhost = db("DB_HOST"); $dbuser = db("DB_USER"); $dbpassword = db("DB_PASSWORD"); $dbname = db("DB_NAME");
这将返回配置目录中当前模式下的db.php中的值。
如果您的模式是testing,则它将返回config/testing/db.php中的值。
email()
此函数用于从当前模式获取mail.php中的变量。
$mail->Host = email("MAIL_HOST"); $mail->Username = email("MAIL_USERNAME"); $mail->Password = email("MAIL_PASSWORD"); $mail->SMTPSecure = email("MAIL_ENCRYPTION"); $mail->Port = email("MAIL_PORT");
modeenv()
此函数用于从当前模式获取env.php中的变量。
如果您想在不同模式中设置不同的变量,可以使用此函数。
$variable = modeenv('VARIABLE_NAME);
路径 & 资产
asset()
此函数用于将脚本和样式表链接到视图。此函数将指向public目录。
<link rel="stylesheet" href="<?php echo asset('css/custom.css'); ?>" type="text/css" />
request_path()
此函数用于获取网页的确切URL路径。
<li> <a href="<?php echo url('showcase')?>" class="home <?php if(request_path() == "showcase") echo "active"; ?>">Showcase</a> </li> <li> <a href="<?php echo url('about')?>" class="home <?php if(request_path() == "about") echo "active"; ?>">About Us</a> </li>
request_is()
此函数将给定路径的前缀与URL路径匹配,如果匹配则返回true。
<li class="nav-item <?php if(request_is("masterzone/pages")) echo "active"; ?>"></li>
此功能将检查URL路径是否以 masterzone/pages 为前缀,如果是,则返回 true。
url()
此函数用于生成URL。
echo url("contact");
这将生成带有联系信息的完整URL。这将同时在视图和控制台中使用。
get_url()
此函数用于获取页面当前的URL。这将打印整个URL。
$url = get_url();
存储
storage_asset()
此函数用于从 public 目录中的 storage 目录检索上传的文件。
<img src="<?php echo storage_asset('images/uploaded.png'); ?>" />
这将返回 public/storage/images/uploaded.png。