PHP code example of yangsuda / slimcms

1. Go to this page and download the library: Download yangsuda/slimcms library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

yangsuda / slimcms example snippets


use SlimCMS\Core\RouteAction as Route;

Route::get('/path',  'Controller@method');   // GET
Route::post('/path', 'Controller@method');   // POST
Route::put('/path',  'Controller@method');   // PUT
Route::delete('/path','Controller@method');  // DELETE
Route::patch('/path','Controller@method');   // PATCH
Route::gp('/path',   'Controller@method');   // GET + POST
Route::any('/path',  'Controller@method');   // 所有方法
Route::map(['GET','POST'], '/path', 'Controller@method'); // 自定义方法

// 路由分组,支持链式挂载中间件
Route::group('/admin', function () {
    Route::gp('/login', 'admin\LoginController@login');
    Route::group('', function () {
        Route::get('/index', 'admin\MainController@index');
        Route::gp('/{path1}/{path2}'); // 动态路由参数
    })->add(AdminAuthMiddleware::class)->add(CsrfMiddleware::class);
})->add(SessionMiddleware::class);

Route::get('/',         'main\MainController@index');
Route::get('/captcha',  'main\MainController@captcha');

Route::group('/admin', function () {
    // 无需登录即可访问
    Route::gp('/login',     'admin\LoginController@login');
    Route::get('/logout',    'admin\LoginController@logout');
    Route::get('/captcha',   'main\MainController@captcha');
    Route::get('/enumsData', 'main\MainController@enumsData');

    // 需要登录与 CSRF 校验
    Route::group('', function () {
        Route::get('/index',     'admin\MainController@index');
        Route::gp('/updatePwd',  'admin\MainController@updatePwd');
        Route::gp('/ueditor',    'admin\UeditorController@ueditor');
        Route::gp('/{path1}/{path2}');  // 通用后台操作
    })->add(AdminAuthMiddleware::class)->add(CsrfMiddleware::class);
})->add(SessionMiddleware::class);

$app->add(Middleware::class)
    ->add(ErrorLogMiddleware::class)
    // ... 路由注册 ...
    ->add(CorsMiddleware::class); // 跨域处理

namespace app\Controller\main;

use Psr\Http\Message\ResponseInterface;
use Slim\App;
use SlimCMS\Abstracts\ControlAbstract;

class MainController extends ControlAbstract
{
    public function __construct(App $app)
    {
        parent::__construct($app);
    }

    public function index(): ResponseInterface
    {
        return $this->view($this->output, 'index');
    }
}

$id   = $this->inputInt('id');
$name = $this->inputString('name');
$data = $this->input(['page' => 'int', 'size' => 'int', 'kw' => 'string']);

// 模板渲染
return $this->view($this->output, 'admin/index');

// JSON 返回
return $this->json($this->output->withData(['list' => $list]));

// 重定向
return $this->directTo($res->withReferer('/admin/index'));

// 自动协商(推荐)
return $this->resp($this->output->withData($data), 'admin/form');

   use app\Service\aliyun\AliOssService;
   use SlimCMS\Interfaces\UploadInterface;
   // ...
   UploadInterface::class => autowire(AliOssService::class),
   


declare(strict_types=1);

namespace app\Table;

use SlimCMS\Core\Form\TableHookInterface;
use SlimCMS\Core\Table;

class AdminlogTable extends Table implements TableHookInterface
{
    public function setTableName(string $tableName, string $extendName = null): self
    {
        // 类名自动推导表名(不含 Table 后缀)
        $tableName = strtolower(substr(pathinfo(__CLASS__, PATHINFO_FILENAME), 0, -5));

        // 默认为当前年份分表,调用方也可显式传入
        if (!isset($extendName)) {
            $extendName = date('Y');
        }
        return parent::setTableName($tableName, $extendName);
    }
}

$containerBuilder->enableCompilation(CSDATA);
json
""php": "^8.1",
    "ext-curl": "*",
    "ext-json": "*",
    "ext-redis": "*",
    "respect/validation": "^2.2",
    "vlucas/phpdotenv": "^5.6",
    "yangsuda/framework": "^6.0"
}
htm
{$data[xxx][xxx]}
htm
{if $data['status'] == 1}
  <span>已发布</span>
{elseif $data['status'] == 0}
  <span>草稿</span>
{else}
  <span>未知</span>
{/if}
htm
<!--{if $data['status'] == 1}-->
...
<!--{/if}-->
htm
{loop $data['list'] $k $v}
  <li>{$k} - {$v['title']}</li>
{/loop}
htm
{list fid=表单ID}
  <tr>{$v[...]}</tr>
{/list}
bash
   composer 
ini
; php.ini
opcache.enable=1
opcache.memory_consumption=192
opcache.max_accelerated_files=20000
opcache.validate_timestamps=0   ; 配合部署流程重载
nginx
server {
    listen 80;
    server_name your-domain.com;
    root /path/to/slimcms/public;
    index index.php index.html;

    location / {
        autoindex off;
        try_files $uri $uri/ /index.php?$query_string;
    }

    # 禁止访问敏感目录(可选)
    location ~ ^/(install|data|vendor|cli|tests)/ {
        deny all;
    }

    # PHP 处理
    location ~ \.php$ {
        fastcgi_pass unix:/run/php/php-fpm.sock;
        fastcgi_index index.php;