vespula/slim-skeleton

此包已被弃用且不再维护。作者建议使用vespula/slim-mvc包。

创建Slim Framework v3应用的起点。

安装: 144

依赖项: 0

建议者: 0

安全: 0

类型:项目

1.2.0 2017-03-13 17:14 UTC

This package is auto-updated.

Last update: 2022-02-01 12:52:55 UTC


README

这是一个用于快速开始使用Slim Framework版本3的骨架应用程序。它包含

  • Slim Framework,
  • 通过League/Plates的模板系统,
  • 通过Slim/Flash的会话闪存工具,
  • 通过League/CLImate创建项目和控制器命令行界面(CLI),
  • 用于显示本地化字符串的本地化库,
  • PSR-3日志记录器和
  • 认证系统。

目录

设置/安装

  • 获取最新的开发版本 composer create-project -s dev vespula/slim-skeleton your/path
  • 获取最稳定的版本(不带VCS) composer create-project vespula/slim-skeleton your/path
  • 获取最稳定的版本(带VCS) composer create-project --keep-vcs vespula\slim-skeleton your/path
  • 或者直接克隆或下载仓库,然后运行 composer install,然后 composer run-script post-create-project-cmd

如果您选择删除项目的VCS (.git) 信息并使用自己的仓库,请确保修改 .gitignore 文件。默认的配置会忽略 src 文件夹,这可能不是您自己想要的结果。

如果您保留VCS (.git) 信息,则可以将创建的新项目放在 src 文件夹下,并使用它们自己的版本控制。默认情况下,会忽略 src 文件夹。

检查您的 .htaccess 文件

默认设置附带一个 .htaccess 文件,该文件使用 mod_rewrite 对URL进行处理。它将所有请求都指向 index.php。此外,还有一个名为 RewriteBase 的设置,需要正确设置以匹配您的配置。默认情况下,它指向 /slim(例如,如果您在apache中使用别名)。如果项目设置在您的Web服务器的根目录,请取消注释 RewriteBase 设置。如果您使用不同的文件夹名作为别名,请调整 RewriteBase 以匹配您的文件夹。

使用CLI工具创建项目

  • 切换到您的 slim-skeleton 文件夹,并运行以下命令
$ ./script/create
  • 通过按“p”创建项目,并遵循提示。创建项目时,将创建一个默认的 Index 控制器和关联的视图。
  • 在 html/index.php 文件中已创建一个默认的路由。它将指向新创建的控制类和索引方法。
  • 完成后,您应该可以浏览到您的文件夹并查看结果。
  • 您还可以通过命令行工具创建更多的控制器。像上面一样启动脚本,并选择“c”来创建控制器。

我强烈建议您深入研究代码,以了解系统的工作方式。

创建控制器

在创建项目后,您可以为该项目轻松创建新的控制器。使用 create 脚本创建控制器,确保使用您的项目作为命名空间。

$ ./script/create
  • 通过按“c”创建控制器,并遵循提示。

添加路由

创建项目时,将包含一个路由文件。它们将在 /src/YourProject 下的 routes.php 文件中。

您可以将此文件作为创建新路由的示例。如果使用控制器,请记住控制器需要3个参数:一个Interop\Container\ContainerInterface $container,一个Psr\Http\Message\ServerRequestInterface $request,以及一个Psr\Http\Message\ResponseInterface $response

有关路由的更多信息,请参阅Slim的网站

日志记录

基本应用程序包含一个PSR-3兼容的日志记录器,您可以替换或删除它。以下是一个简单示例

<?php
$this->log->warning('This is a warning message');
$this->log->info('This is informative');

日志输出数据的位置由您决定。您在依赖文件中定义适配器。查看Vespula/Log文档

本地化

基本应用程序包含一个输出翻译字符串的库。它不会为您翻译,但会根据您使用的区域设置输出适当的字符串。区域设置对象在依赖文件中进行配置。

<?php
echo $locale->gettext('TEXT_HELLO');

有关设置和使用区域设置类的信息,请参阅其文档

认证

基本应用程序包含一个轻量级认证库,可以使用PDO对SQL数据库或对Active Directory/LDAP进行用户验证。它还包括一个简单的文本验证适配器用于测试。认证对象在依赖文件中定义。您可以在那里修改设置。有关设置认证对象和不同适配器的所有文档,请参阅Vespula/Auth文档

首先,您需要设置一些路由来匹配登录请求(一个通过GET,一个通过POST),以及注销请求。在您的项目routes.php文件中,添加以下内容

<?php
// Replace "Project" with the name of your project

$app->group('/login', function () {
    $this->get('', function($request, $response) {
        $controller = new \Project\Controllers\Index($this, $request, $response);
        return $controller->login();
    });
    $this->post('', function($request, $response) {
        $controller = new \Project\Controllers\Index($this, $request, $response);
        return $controller->doLogin();
    });
});

$app->get('/logout', function ($request, $response) {
    $controller = new \Project\Controllers\Index($this, $request, $response);
    return $controller->logout();
});

接下来,您需要在路由中描述的控制器中添加login()doLogin()logout()的操作。

<?php

namespace Project\Controllers;
class Index extends Controller {
// ...

    public function login()
    {
        // you should use a csrf strategy here too. Aura Session (included) has csrf tools.
        $content = $this->view->render('index/login', ['messages'=>$this->messages]);
        return $this->response->write($content);
    }

    public function doLogin()
    {
        $username = filter_input(INPUT_POST, 'username', FILTER_SANITIZE_STRING);
        $password = filter_input(INPUT_POST, 'password', FILTER_DEFAULT);
        $password = strip_tags($password);
        $credentials = [
            'username'=>$username,
            'password'=>$password
        ];
        $this->auth->login($credentials);
        if ($this->auth->isValid()) {
            $this->setFlash('info', 'You are logged in');
            // $this->log->info($username . ' logged in');
            return $this->redirect('/');
        } else {
            $this->setFlash('error', 'bad login');
            // $this->log->error($username . ' failed to log in');
            return $this->redirect('/login');
        }

    }

    public function logout()
    {
        $username = $this->auth->getUsername();
        $this->auth->logout();
        if ($this->auth->isAnon()) {
            $this->setFlash('info', 'Goodbye');
            // $this->log->info($username . ' logged out');
            return $this->redirect('/');
        } else {
            $this->setFlash('error', 'Could not log you out...');
            // $this->log->error($username . ' failed logging out');
            return $this->redirect('/');
        }
    }
}

对于认证状态,可能需要进行一些其他检查。例如,您可能想知道某人是否已经闲置太久,或者他们是否已经超过了会话的过期时间。您可以在基控制器的构造函数中设置这些检查。

if ($this->auth->isIdle()) {
    // flash message, etc
}

if ($this->auth->isExpired()) {
    // flash some message
}

任何需要检查用户是否有效的时候,只需调用$this->auth->isValid()。在视图中,您可以调用$auth->isValid()

登录模板

您的登录模板index/login.php在视图文件夹中可能看起来像这样

<?php $this->layout('layouts::' . $theme); ?>

<?php echo $this->alerts($messages); ?>
<?php if ($auth->isValid()) : ?>
<p>You are already logged in! How special for you!</p>
<?php else : ?>
<h2>Login</h2>
<div class="row">
    <div class="col-lg-2">
        <form action="" method="post">
            <div class="form-group">
                <label for="username">Username</label>
                <input type="text" class="form-control" name="username" id="username" placeholder="Username" />
            </div>
            <div class="form-group">
                <label for="password">Password</label>
                <input type="password" class="form-control" name="password" id="password" placeholder="Password" autocomplete="off" />
            </div>
            <input type="submit" class="btn btn-primary" value="Login" />
        </form>
    </div>
</div>
<?php endif; ?>

显示警报

基本应用程序捆绑了一个简单的League Plates扩展。任何需要输出主题警报到视图的时候,都可以像调用视图辅助器一样调用它。

警报扩展有4个主题,与Slim骨架提供的布局相匹配。您可以通过传递一个主题作为第二个参数在任何时候指定一个主题,但建议您在定义警报的容器中进行此操作。查看依赖文件。$alerts->setTheme()

警报扩展包含以下主题:bootstrap、foundation、gcweb和gcwu。后两个是加拿大政府模板。

<?php
echo $this->info('Some message');
echo $this->error('Some message', $mytheme);

// Echo several at once
$messages = [
    'error'=>[
        'Error one',
        'Error two'
    ],
    'info'=>[
        'Info one',
        'Info two'
    ]
];

echo $this->alerts($messages);

故障排除

如果您有任何问题,首先要检查的是

  1. 您的别名或虚拟主机是否设置正确并指向/slim-skeleton/html文件夹?
  2. 如果您启用了apache mod_rewrite,请检查html文件夹中的.htaccess,并确保RewriteBase设置正确。默认情况下可能不是这样。

资源