xsanisty/slim-starter

基于MVC架构的Slim框架,使用Eloquent作为数据库提供者和Twig作为模板引擎

安装次数: 2 122

依赖者: 1

建议者: 0

安全性: 0

星标: 287

关注者: 32

分支: 72

语言:JavaScript

1.0.0-alpha 2014-05-26 13:54 UTC

This package is not auto-updated.

Last update: 2024-09-19 06:08:49 UTC


README

SlimStarter是一个使用Slim框架在MVC架构下构建的启动应用程序,使用Laravel的Eloquent作为数据库提供者(模型)和Twig作为模板引擎(视图)。

附加包是Sentry作为认证提供者和Slim-facade,它提供了使用静态接口(类似于Laravel语法)轻松访问底层Slim API的方式(基于Laravel的Facade构建)。

展示

您可以通过访问以下链接在实时网站上测试SlimStarter:(共享主机)http://slimstarter.xsanisty.com (pagodabox)http://slimstarter.gopagoda.com

用户名为admin@admin.com,密码为password

安装

您现在可以通过App Cafe在pagodabox上安装SlimStarter,链接为:https://pagodabox.com/cafe/ikhsan017/slimstarter

1 手动安装

您可以通过克隆此仓库或从该仓库下载zip文件来手动安装SlimStarter,并运行composer install

$git clone https://github.com/xsanisty/SlimStarter.git .
$composer install

2 通过composer create-project安装

或者,您可以使用composer create-project安装SlimStarter,而无需下载zip或克隆此仓库。

composer create-project xsanisty/slim-starter --stability="dev"

3 设置权限

在composer完成依赖项安装后,您需要更改文件和文件夹的权限。

chmod -R 777 app/storage/
chmod 666 app/config/database.php

4 配置和设置数据库

您现在可以通过在浏览器中指向install.php来访问安装程序

https:///path/to/SlimStarter/public/install.php

配置

SlimStarter的配置文件位于app/config,编辑database.php、cookie.php等以匹配您的需求

路由

路由配置位于app/routes.php,它使用Route facade来访问底层Slim路由器。如果您更喜欢'Slim'的方式,您可以使用$app来访问Slim实例

路由到闭包

Route::get('/', function(){
    View::display('welcome.twig');
});

/** the Slim way */
$app->get('/', function() use ($app){
    $app->view->display('welcome.twig');
});

路由到控制器方法

/** get method */
Route::get('/', 'SomeController:someMethod');

/** post method */
Route::post('/post', 'PostController:create');

/** put method */
Route::put('/post/:id', 'PostController:update');

/** delete method */
Route::delete('/post/:id', 'PostController:destroy');

路由中间件

/** route middleware */
Route::get('/admin', function(){
    //route middleware to check user login or redirect
}, 'AdminController:index');

路由分组

/** Route group to book resource */
Route::group('/book', function(){
    Route::get('/', 'BookController:index'); // GET /book
    Route::post('/', 'BookController:store'); // POST /book
    Route::get('/create', 'BookController:create'); // Create form of /book
    Route::get('/:id', 'BookController:show'); // GET /book/:id
    Route::get('/:id/edit', 'BookController:edit'); // GET /book/:id/edit
    Route::put('/:id', 'BookController:update'); // PUT /book/:id
    Route::delete('/:id', 'BookController:destroy'); // DELETE /book/:id
});

路由资源,这将与上面的路由分组具有相同的效果,类似于Laravel Route::resource

/** Route to book resource */
Route::resource('/book', 'BookController');

路由控制器

/** Route to book resource */
Route::controller('/book', 'BookController');

/**
 * GET /book will be mapped to BookController:getIndex
 * POST /book will be mapped to BookController:postIndex
 * [METHOD] /book/[path] will be mapped to BookController:methodPath
 */

模型

模型位于app/models目录中,由于使用了Eloquent作为数据库提供者,您可以像为Laravel编写模型一样编写模型。有关Eloquent的完整文档,请参阅https://laravel.net.cn/docs/eloquent

文件:app/models/Book.php

class Book Extends Model{}

注意:由于依赖Laravel和Symfony的一些组件(这些组件不包括在内),Eloquent有一些限制,例如remember()paginate和验证方法,这些方法依赖于Illuminate\CacheIlluminate\FilesystemSymfony\Finder等。

控制器

控制器位于app/controllers目录中,您可以扩展BaseController以访问预定义的辅助函数。您还可以将您的控制器放在命名空间中以对控制器进行分组。

文件:app/controllers/HomeController.php

Class HomeController extends BaseController{

    public function welcome(){
        $this->data['title'] = 'Some title';
        View::display('welcome.twig', $this->data);
    }
}

控制器辅助函数

获取对Slim实例的引用

您可以通过访问控制器中的$app属性来在控制器内部访问Slim实例

$this->app; //reference to Slim instance

加载JavaScript或CSS资源

SlimStarter 默认附带主模板,其中已预置js和css资产,要加载自己的js或css文件,可以使用 loadJsloadCss 加载,使用 removeJsremoveCss 移除js或css,使用 resetJsresetCss 移除所有队列中的js或css文件。

/**
 * load local js file located in public/assets/js/application.js
 * by default, it will be placed in the last list,
 * to modify it, use position option in second parameter
 * array(
 *      'position' => 'last|first|after:file|before:file'
 * )
 */
$this->loadJs('application.js', ['position' => 'after:jquery.js'])

/**
 * load external js file, eg: js in CDN
 * use location option in second parameter
 * array(
 *      'location' => 'internal|external'
 * )
 */
$this->loadJs('https://code.jqueryjs.cn/jquery-1.11.0.min.js', ['location' => 'external']);

/** remove js file from the list */
$this->removeJs('user.js');

/** reset js queue, no js file will be loaded */
$this->resetJs();


/** load local css file located in public/assets/css/style.css */
$this->loadCss('style.css')

/** load external css file, eg: js in CDN */
$this->loadCss('//netdna.bootstrap.ac.cn/bootstrap/3.1.1/css/bootstrap.min.css', ['location' => 'external']);

/**

将PHP变量发布到javascript

您还可以发布PHP变量,使其可通过javascript访问(必须继承自master.twig)

/** publish the variable */
$this->publish('user', User::find(1)->toArray());

/** remove the variable */
$this->unpublish('user');

用户变量将在 'global' 命名空间中可用

console.log(global.user);

模板中默认可用的变量

视图

视图文件位于 app/views 目录中,采用twig格式,其中包含默认的主模板master.twig,它以body块的形式提供,这是SlimStarter附带的主模板,将提供对发布的js变量的默认访问。

有关详细的Twig文档,请参阅 http://twig.sensiolabs.org/documentation

文件:app/views/welcome.twig

{% extends 'master.twig' %}
{% block body %}
    Welcome to SlimStarter
{% endblock %}

在控制器中渲染视图

如果您的控制器继承自BaseController类,您将可以访问 $data 属性,它将是所有视图数据的占位符。

View::display('welcome.twig', $this->data);

钩子和中间件

您仍然可以在 app/bootstrap/app.php 中钩子Slim事件或注册中间件到Slim实例,Slim实例可通过 $app 变量访问。

$app->hook('slim.before.route', function(){
    //do your hook
});

$app->add(new SomeActionMiddleware());

您可以在 app/middlewares 目录中编写自己的中间件类。

文件:app/middlewares/SomeActionMiddleware.php

class SomeActionMiddleware extends Middleware
{
    public function call()
    {
        // Get reference to application
        $app = $this->app;

        // Run inner middleware and application
        $this->next->call();

        // do your stuff
    }
}

如果自动加载器无法解析您的类,请执行 composer dump-autoload,这样composer就可以解析您的类位置。