Soliは軽量のPHPフレームワークであり、PhalconおよびLaravelフレームワークの設計を指し、ゆるく結合し、スケーラブルで、シンプルで、使いやすいことを目的としています。
MVC、依存関係インジェクション、イベント管理、フラッシュメッセージ、テンプレートエンジン(Twig、Smarty)ルーティング、コマンドラインアプリケーション、その他の機能
上記の写真から、ソリリクエストの処理フローは次のとおりです。
アプリケーションは、受信したHTTP要求をルーティングプロセスに渡し、ルーティング結果をコントローラースケジューラに渡します。コントローラーは、アプリケーションのビジネスロジックを処理し、対応するモデルとビューを呼び出し、スケジューラを介して処理結果をアプリケーションに返し、最終的なHTTP応答カプセル化を実行します。
さらに、Soliは依存関係噴射コンテナによって提供されるコンポーネントメカニズムを提供するため、開発者はコンポーネントを開発するときにコンテナ内のさまざまなサービスを簡単に使用できます。
Soliのイベントマネージャーを使用すると、開発者は「フック」を作成して、フレームワークまたはアプリケーションのコンポーネントをインターセプトできます。ステータス情報を取得したり、データを操作したり、特定のコンポーネントプロセスで実行フローを変更したりします。
$ composer create-project soliphp/soliphp my-project
$ cp my-project/.env.example my-project/.env
$ php -S localhost:8000 -t my-project/public
ブラウザアクセスhttp:// localhost:8000/。
upstream php-fpm
{
server unix:/tmp/php-fpm.sock;
}
server
{
listen 80 ;
server_name www.soliphp.com;
index index.html index.php;
root /path/to/soliphp/public;
location / {
try_files $uri $uri / /index.php? $query_string ;
}
location ~ .php$ {
include fastcgi.conf;
fastcgi_pass php-fpm;
}
} # Apache 2.4
< VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot " /path/to/soliphp/public "
DirectoryIndex index.php
ServerName www.soliphp.com
< Directory "/path/to/soliphp/public">
Options All
AllowOverride All
Allow from all
Require all granted
RewriteEngine on
RedirectMatch 403 /..*$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php
</ Directory >
</ VirtualHost > ├── app 应用程序目录
│ ├── Console 终端命令应用控制器目录
│ │ ├── Command.php 终端命令应用基类
│ │ └── Demo.php Demo命令
│ ├── Controllers WEB应用控制器目录
│ │ ├── Controller.php 控制器基类
│ │ ├── IndexController.php 默认控制器
│ │ └── UserController.php 和用户相关的控制器
│ ├── Events 事件目录
│ │ ├── AppEvents.php WEB应用事件
│ │ └── UserEvents.php 用户相关的事件
│ ├── Models 模型目录
│ │ ├── Model.php 模型基类
│ │ └── UserModel.php 用户模型
│ ├── Services 服务层目录
│ │ ├── Service.php 服务基类
│ │ └── UserService.php 用户相关的服务
│ └── bootstrap.php
├── bin
│ └── console 终端命令应用入口文件
├── composer.json composer配置文件
├── config 配置文件目录
│ ├── config.php 基础配置文件
│ ├── console.php 针对终端命令应用的配置文件
│ ├── routes.php 路由配置文件
│ └── services.php 容器服务配置文件
├── phpcs.xml
├── public WEB服务公共可被访问的文件目录
│ ├── css
│ ├── img
│ ├── index.php WEB程序入口文件
│ └── js
├── var 生成的文件目录
│ ├── cache 缓存文件目录
│ └── log 日志文件目录
└── views 视图文件目录
└── index IndexController 对应的视图目录
└── index.twig index 函数对应的视图文件
ディレクトリ構造は固定されていません。ディレクトリ構造は、実際のプロジェクトのニーズとチーム開発習慣に従って合意することができ、各ディレクトリの意味を定義および表現できます。
bootstrap.phpで定義されている2つの基本定数があります。
APP_PATH 对应 app 目录
BASE_PATH 项目根目录
基本的な構成情報は、デフォルトでconfig/config.phpファイルに保存されます。
<?php
// 基本配置信息
$ config = array (
// 应用
' app ' => array (
' viewsDir ' => BASE_PATH . ' /views/ ' ,
' logDir ' => BASE_PATH . ' /var/log/ ' ,
' cacheDir ' => BASE_PATH . ' /var/cache/ ' ,
),
// 数据库
' db ' => array (
' dsn ' => ' mysql:host=localhost;port=3306;dbname=test;charset=utf8 ' ,
' username ' => ' root ' ,
' password ' => ' root ' ,
),
// 更多...
);Composerは優れたパッケージ管理ツールであり、トレンドであるため、Soliは自動荷重と依存関係管理のために作曲家を使用します。
Composer.jsonでは、アプリのディレクトリは、アプリの先頭にある名前空間として構成されています。
"autoload": {
"psr-4": {
"App\": "app/"
}
}
したがって、アプリディレクトリのPSR-4ルールによって定義されたクラスは、コントローラーやコンソールディレクトリのように、呼び出されたときに自動的にロードできます。
依存関係噴射コンテナの目的は、コードの結合を減らし、アプリケーションの保守性を向上させることです。コンポーネント間の依存関係をコンテナの依存関係に変換し、サービス管理(作成、構成、位置決め)がコンテナを介して実行されます。
コンテナサービスの構成は、デフォルトでconfig/services.phpファイルに保存されます。
<?php
use Soli Di Container ;
use Soli Db Connection as DbConnection ;
use Soli Logger ;
use Soli View ;
use Soli View Engine Twig as TwigEngine ;
use Soli View Engine Smarty as SmartyEngine ;
$ container = new Container ();
// 将配置信息扔进容器
$ container -> set ( ' config ' , require BASE_PATH . ' /config/config.php ' );
// 配置数据库信息, Model中默认获取的数据库连接标志为"db"
// 可使用不同的服务名称设置不同的数据库连接信息,供 Model 中做多库的选择
$ container -> set ( ' db ' , function () {
return new DbConnection ( $ this -> config -> db );
});
// 路由
$ container -> set ( ' router ' , function () {
$ routesConfig = require BASE_PATH . ' /config/routes.php ' ;
$ router = new Soli Router ();
$ router -> setDefaults ([
// 控制器的命名空间
' namespace ' => " App \ Controllers \"
]);
foreach ( $ routesConfig as $ route ) {
list ( $ methods , $ pattern , $ handler ) = $ route ;
$ router -> map ( $ methods , $ pattern , $ handler );
}
return $ router ;
});
// TwigEngine
$ container -> set ( ' view ' , function () {
$ config = $ this -> config ;
$ view = new View ();
$ view -> setViewsDir ( $ config -> app -> viewsDir );
$ view -> setViewExtension ( ' .twig ' );
// 通过匿名函数来设置模版引擎,延迟对模版引擎的实例化
$ view -> setEngine ( function () use ( $ config , $ view ) {
$ engine = new TwigEngine ( $ view );
// 开启 debug 不进行缓存
//$engine->setDebug(true);
$ engine -> setCacheDir ( $ config -> app -> cacheDir . ' twig ' );
return $ engine ;
});
return $ view ;
});
// 如果使用 Smarty 的话,可进行如下设置:
// SmartyEngine
$ container -> set ( ' view ' , function () {
$ config = $ this -> config ;
$ view = new View ();
$ view -> setViewsDir ( $ config -> app -> viewsDir );
$ view -> setViewExtension ( ' .tpl ' );
// 通过匿名函数来设置模版引擎,延迟对模版引擎的实例化
$ view -> setEngine ( function () use ( $ config , $ view ) {
$ engine = new SmartyEngine ( $ view );
// 开启 debug 不进行缓存
$ engine -> setDebug ( true );
$ engine -> setOptions ( array (
' compile_dir ' => $ config -> app -> cacheDir . ' templates_c ' ,
' cache_dir ' => $ config -> app -> cacheDir . ' templates ' ,
' caching ' => true ,
' caching_type ' => ' file ' ,
' cache_lifetime ' => 86400 ,
));
return $ engine ;
});
return $ view ;
});さらに、Soli web Appは、コントローラーとカスタムコンポーネントが直接使用するためにデフォルトで一般的に使用されるサービスを登録します。
| サービス名 | 導入 | デフォルト | 共有サービスですか? |
|---|---|---|---|
| ルーター | ルーティングサービス | soli web router | はい |
| ディスパッチャ | コントローラースケジューリングサービス | Soli Dispatcher | はい |
| リクエスト | HTTPリクエスト環境サービス | soli web request | はい |
| 応答 | HTTP応答環境サービス | soli web Response | はい |
| セッション | セッションサービス | soli web セッション | はい |
| フラッシュ | フラッシュメッセージサービス | soli web flash | はい |
開発者が同じ名前のサービスをカスタマイズして、上記のデフォルトサービスをオーバーライドできるようにします。
Webアプリケーションのエントリファイルは、デフォルトでpublic/index.phpに保存され、次のようになります。
<?php
require dirname ( __DIR__ ) . ' /app/bootstrap.php ' ;
$ app = new Soli Web App ();
// 处理请求,输出响应内容
$ app -> handle ()-> send ();
$ app -> terminate ();コントローラークラスはデフォルトで「コントローラー」になり、アクションには接尾辞がありません。
コントローラーは、プロパティにアクセスして、コンテナに登録されているすべてのサービスにアクセスできます。
<?php
use Soli Controller ;
use App Models User ;
class UserController extends Controller
{
/**
* 用户详情
*
* 自动渲染 views/user/view.twig 视图
*/
public function view ( $ id )
{
// 这里调用了容器中的 view 服务,设置一个模版变量
$ this -> view -> setVar ( ' user ' , User:: findById ( $ id ));
}
}SOLIモデルは、データベースを操作するための一般的な方法のみを提供し、ORMを実装しません。これは、データソースとプロジェクトアーキテクチャによって決定されます。データがリモートインターフェイスから来る可能性があり、チームが教義の使用に慣れている可能性もあります。 Soliは、さまざまなアプリケーションシナリオで開発者の選択と使用習慣を尊重し、チームや実際のニーズに適したデータレイヤーを実装できるように、簡単なスケーリング方法を提供します。
モデルの使用:
<?php
use Soli Model ;
class User extends Model
{
}ここで、ユーザーモデルを呼び出すと、コンテナ内の「DB」という名前のサービスがデフォルトで呼び出され、操作のテーブル名は「ユーザー」です。
他のデータベース接続サービスを指定する必要がある場合は、モデルのprotected $connectionプロパティを使用して設定します。
/**
* 当前模型访问的数据库连接服务名称
*/
protected $ connection = ' user_db ' ;データベース接続サービスを指定できるため、マルチデータベース操作が自然にサポートされています。
このモデルは、クラス名のラクダ形式を、デフォルトモデルによって変換される記憶に残るテーブル名など、対応するテーブル名のアンダースコア形式に自動的に変換されます。
また、モデルのprotected $tableプロパティを使用して、テーブル名を手動で指定することもできます。
/**
* 当前模型操作的表名
*/
protected $ table = ' xxx_user ' ;また、モデルのprotected $primaryKeyプロパティを使用してプライマリキーを指定することもできます。デフォルトのプライマリキーはidです。
/**
* 当前模型所操作表的主键
*/
protected $ primaryKey = ' xxx_id ' ;主キーは、主にfindByIdおよびfindByIds関数に使用されます。
ソリモデルのサポートされている方法については、SolipHP/DBに移動してください。
ビューファイルはビューディレクトリに保存され、コントローラーに対応するディレクトリ構造とビューは次のとおりです。
├── app 应用程序目录
│ └── Controllers WEB应用控制器目录
│ └── UserController.php
└── views 视图文件目录
└── user UserController 对应的视图目录
└── view.twig view 函数对应的视图文件
コントローラーアプリ/コントローラー/usercontroller.php:
<?php
use Soli Controller ;
use App Models User ;
class UserController extends Controller
{
public function view ( $ id )
{
$ this -> view -> setVar ( ' user ' , User:: findById ( $ id ));
$ this -> flash -> notice ( ' user info ' );
}
}ファイルビュー/ユーザー/view.twigの表示、ここでは、Twigテンプレートエンジンを例に掲載します。
用户姓名:{{ user . name }}
用户邮箱:{{ user . email }}
{{ flash. output () }}ビューを使用する方法については、Soliphp/Viewに移動してください。
読んでくれてありがとう。