xsanisty / slim-starter
基于MVC架构的Slim框架,使用Eloquent作为数据库提供者和Twig作为模板引擎
Requires
- php: >= 5.3.0
- cartalyst/sentry: 2.*
- illuminate/database: 4.*
- ircmaxell/password-compat: 1.0.*
- itsgoingd/slim-facades: dev-master
- slim/slim: 2.4.*
- slim/views: 0.1.2
- twig/extensions: *
- twig/twig: 1.*
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\Cache
、Illuminate\Filesystem
、Symfony\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文件,可以使用 loadJs
或 loadCss
加载,使用 removeJs
或 removeCss
移除js或css,使用 resetJs
或 resetCss
移除所有队列中的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就可以解析您的类位置。