alishahidi/apantos

Apantos 框架。

安装: 12

依赖者: 0

建议者: 0

安全: 0

星级: 14

关注者: 1

分支: 2

开放问题: 2

类型:项目

v1.4.4 2023-01-10 17:14 UTC

This package is auto-updated.

Last update: 2024-09-30 01:46:57 UTC


README

目录

什么是 apantos

Apantos 是一个基于 PHP 的快速简单框架,具有安全方法和专门的 ORM。模块化

如何创建第一个 Apantos 项目

此项目可在 composer packagist 上找到,您可以通过 composer create-project 容易地安装

composer create-project alishahidi/apantos

在端口 8000 上提供服务

php -S 127.0.0.1:8000 -t public

设置令牌

创建项目后,您必须通过默认的 CRYPT_TOKEN & TOKEN 变量设置 .env,并通过此 URL /api/token 获取有效令牌,使用此 URL 两次并保存提供的令牌到环境变量中

建议在保存令牌后从 /routes/api 中删除令牌 API 路由

框架架构是什么?

此框架使用 MVC 架构

模型在 app/Models,视图在 resources/view,控制器在 app/Controllers

目录结构

- app
  - Http
    - Controllers
    - Request
    - Services
  - Models
  - Providers
- bootstrap
  - /bootstrap.php/
- config
  - /app.php/
  - /database.php/
  - /image.php/
  - /mail.php/
- database
  - migrations
- public
  - /index.php/
- resources
  - view
- routes
  - /api.php/
  - /web.php/
- storage
  - fonts
  - images
- system

目录说明

app

重要的目录包含控制器、请求和...,用于管理路由处理程序和检查表单输入等

Http

包含网络请求处理程序和服务

控制器

路由管理类

标准名称:NameController.php

Request

用户输入检查器

标准名称:NameRequest.php

Services

重构的类

标准名称:Name.php

Models

数据库模型

标准名称 Name.php 使用单数名词

Providers

如果存储在配置文件中,则 Providers 在每个请求中运行

标准名称:NameProvider.php

bootstrap

包含 bootstrap.php 文件

此文件的任务是加载框架

public

此目录作为根目录

每个请求都必须重定向到 index.php 文件

resources

包含视图目录

view

包含视图目录和 PHP 文件

使用 apts 模板引擎的标准名称:view.apts.php,不使用模板引擎的标准名称:view.php

routes

web.php

用于网络请求路由

api.php

用于 API 请求路由

storage

用于项目文件,例如用于包的文件

system

框架的核心

路由系统

所有路由都在 routes/{web, api}.php 文件中可用

如何创建路由

注意

Web 路由从 / 开始,API 路由从 /api 开始

Argvs

  1. URL
  2. 具有命名空间和类函数名称的控制器,名称后跟 @
  3. 路由名称

获取

Route::get('/', "Home\HomeController@index", 'home.index');

提交

Route::post('/login', "Auth\LoginController@login", 'auth.login');

更新

Route::put('/admin/article/update/{id}', "Admin\ArticleController@update", 'admin.article.update');

删除

Route::delete('/admin/article/delete/{id}', "Admin\ArticleController@destroy",'admin.article.delete');

控制器

由路由系统调用的控制器

必须在 Route 方法中设置控制器

app/Http/Controller中创建您的控制器,如下所示

namespace App\Http\Controllers\Home;

use App\Http\Controllers\Controller;

class HomeController extends Controller
{
    public function index()
    {
        return "Hi";
    }
}

要使用此示例,您必须在HomeController中设置Route以调用index方法

Route::get('/', "Home\HomeController@index", 'home.index');

现在,如果打开浏览器中的/ URL,您可以看到“Hi”消息

模型

app/Models中创建您的模型,如下所示

namespace App\Models;

use System\Database\ORM\Model;
use System\Database\Traits\HasSoftDelete;

class User extends Model
{
    use HasSoftDelete;

    protected $table = 'users';

    protected $fillable = ['name', 'email', 'password', 'avatar', 'permissions', 'bio'];

    protected $casts = ['permission' => 'arrray']
}

使用单数名词作为模型名称,并在protected $table中设置表的完整名称

您必须在protected $fillable中设置可填充的表列,id、create_at、updated_at、deleted_at默认存在于填充中

casts可以将数组转换为安全的字符串以存储在数据库中,并在从数据库获取记录时将字符串转换为数组

ORM

示例表

用户

分类

标签

帖子

帖子_标签

评论

创建

添加记录

argvs

  1. 值:数组

使用

$user = User::create([
    'username' => 'ali',
    'password' => 'test',
    'phone_number' => '+319021243'
]);

$insertId = $user->insertId;

$user = new User();
$user->username = 'ali';
$user->password = 'test';
$user->phone_number = '+30231234401';
$user->save();

更新

更新记录

argvs

  1. 值:数组 => 使用主键

使用

$user = User::update([
    'id' => 1,
    'username' => 'alishahidi'
]);

// change ali username to alishahidi

$user = User::find(1);
$user->username = 'alishahidi';
$user->save();

删除

删除记录

argvs

  1. 主键

使用

User::delete(1);

所有

提供所有记录

使用

$users = User::all();
foreach($users as $user)
    echo $user->useranem;

// output

    // ali
    // alex
    // pop

查找

提供id为$id的用户

argvs

  1. 主键

使用

$user = User::find(1);
$username = $user->username; // return ali

where

在查询中添加where条件

argvs

如果传递两个参数,则设置操作为=

  1. 属性

如果传递三个参数,则从参数2获取操作,从参数3获取值

  1. 属性
  2. 操作

使用

// get first record
$post = Post::where('title', 'post number 1')->get()[0];
$title = $post->title; // return "post number 1"

// return all record contain "number" in title
$posts = Post::where('title', 'LIKE', "%number%")->get();
foreach($posts as $post)
    echo $post->title

// output

    // post number 1
    // post number 3

whereOr

类似于where,但具有OR操作

whereNull

argvs

  1. 属性

使用

// get records if cat_id is null
$posts = Post::whereNull('cat_id')->get();

whereNotNull

argvs

  1. 属性

使用

// get records if cat_id is not null | is set
$posts = Post::whereNotNull('cat_id')->get();

whereIn

argvs

  1. 属性
  2. 值:数组

使用

// get posts recotds if cat_id in 1, 2, 3
$posts = Post::whereIn('cat_id', [1, 2, 3])->get();

whereBetween

argvs

  1. 属性

使用

// get records if id between 1..3
$posts = Post::whereBetween('id', 1, 3)->get();

randomOrder

随机记录顺序

argvs

  1. 表达式

使用

$posts = Post::randomOrder('DESC')->get();

orderBy

argvs

  1. 属性
  2. 表达式

使用

$posts = Post:orderBy('created_at', 'DESC')->get();

limit

argvs

  1. 数字

使用

// get first 3 records
$posts = Post::limit(0, 3)->get();

count

使用

// get cound of records
$postsCount = Post::count(); // return 4

分页

argvs

  1. 每页

使用

// auto convert page_id with $_GET['_pageid']
$posts = Post::pagination(3);

关系

hasOne

argvs

  1. 模型类名
  2. 外键
  3. 本地键

使用

$user = Post::hasOne(User::class, 'user_id', 'id');

hasMany

argvs

  1. 模型类名
  2. 外键
  3. 本地键

使用

$comments = Post::hasMany(Comment::class, 'post_id', 'id')->get();

belongsTo

argvs

  1. 模型类名
  2. 外键
  3. 本地键

使用

$user = Post::belongTo(User::class, 'user_id', 'id')->get();

belongsToMany

argvs

  1. 模型类名
  2. 枢纽表
  3. 本地键
  4. 枢纽外键
  5. 枢纽其他外键
  6. 外键

使用

$tags = Post::belongsToMany(Tag::class, 'article_tag', 'id', 'post_id', 'tag_id', 'id')->get();
// |      *----------------------------------------------*        |         |       |
// |      *-------------------------------------------------------*         |       |
// *------------------------------------------------------------------------*       |
// *--------------------------------------------------------------------------------*

视图

所有视图都创建在resources/view

apts 模板引擎

- resources
  - view
    - home
      - layouts
        - master.apts.php
        - head-tag.apts.php
      - index.apts.php

home > layouts > master.apts.php

<!DOCTYPE html>
<html lang="en">

<head>
    @include('home.layouts.head-tag')
    @yield('title')
    @yield('head-tag')
</head>

<body>
    @yield('content')
</body>

</html>

home > layouts > head-tag.apts.php

<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">

home > index.apts.php

@extends('app.layouts.app')

@section('head-tag')

<title>Apantos project</title>

@endsection

@section('content')

<h2>Welcome to apantos project</h2>

@endsection

渲染

在路径中用.替换/,路径从resources/view开始

view('home.index');

$message = 'Send message to view';
view('home.index', compact('message'));

在控制器中使用示例

namespace App\Http\Controllers\Home;

use App\Http\Controllers\Controller;

class HomeController extends Controller
{
    public function index()
    {
        $message = 'Send message to view';
        return view('home.index', compact('message'));
    }
}

认证系统

默认使用User模型进行身份验证

注册用户

argvs

  1. 值:数组
  2. 密码输入名称
  3. 加密输入名称:数组

使用

$inputs = [
    'username' => 'alishahidi',
    'password' => 'decoded-secret-from-form',
    'phone_number' => '+13924324'
    'secret' => 'top secret'
];

Auth::storeUser($inputs, 'password', ['secret']);

更新用户

argvs

  1. 值:数组
  2. 允许的输入:key=>value数组
  3. 密码输入名称
  4. 加密输入名称:数组

使用

$inputs = [
    'id' => 1,
    'username' => 'ali',
    'password' => 'decoded-secret-from-form',
];

Auth::updateUser($inputs, ['id', 'username', 'password'], 'password');

使用电子邮件登录

argvs

  1. 电子邮件
  2. 解码密码
  3. 用户不存在错误消息(可选)
  4. 密码错误错误消息(可选)
  5. 记住用户(可选)
  6. 用户cookie验证时间(可选)

使用

Auth::loginEmailUsername('test@test.org', 'secret', "Username wrong.", "Password wrong", true, 4 * 24 * 60 * 60);

使用用户名登录

类似于loginUsingEmail,但将用户名放在第一个参数中的电子邮件之间

使用 ID 登录

argvs

  1. id

使用

Auth::loginUsingId(1);

注销

使用

Auth::logout();

检查

检查用户登录 => 如果未登录,则重定向到auth.login路由名称

使用

Auth::check();

检查登录

检查用户登录 => 返回true/false

使用

$isLogin = Auth::checkLogin();

用户

如果登录,则返回用户

使用

$user = Auth::user();

使用电子邮件的用户

使用

$user = Auth::userUsingEmail('test@test.org');

使用用户名的用户

使用

$user = Auth::userUsingUsername('ali');