使用composer搭建slim framework mvc demo

使用composer dump-autoload生成autoload文件,自动加载编写的modelscontrollers.达到MVC分层的目的。当然使用spl_autoload也可以实现自动加载类,但是本人的服务器环境中,使用spl_autoload命名空间会失效…

安装slim 和 twig-view 以及 Eloquent:fa-hand-o-down:

composer 安装slim
composer 安装twig-view

使用composer autoload 加载自己的 文件

https://getcomposer.org/doc/03-cli.md#dump-autoload

composer配置autoload的文件夹和namespace

运行如下命令php composer.phar dump-autoload windows环境直接composer dump-autoload
下面是我自己新建的目录结构
输入图片说明

index.php 文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
require '../vendor/autoload.php';
$app = new Slim\App(
new \Slim\Container(
include '../core/container.config.php'
)
);
$app->get('/','Core\Controller\Test');
// Render Twig template in route
$app->get('/hello/{name}', function ($request, $response, $args) {
return $this->view->render($response, 'profile.html', [
'name' => $args['name']
]);
})->setName('profile');
$app->run();

container.config.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<?php
return [
'settings' => [
'viewTemplatesDirectory' => '../core/views',
'compilation_cache'=>'../core/caches',
'determineRouteBeforeAppMiddleware' => false,
'displayErrorDetails' => true,
'db' => [
'driver' => 'mysql',
'host' => 'localhost',
'database' => 'note',
'username' => 'root',
'password' => '',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
]
],
'view' => function ($c) {
$view = new \Slim\Views\Twig($c['settings']['viewTemplatesDirectory'], [
'cache' => $c['settings']['compilation_cache'],
//'cache' => false,
]);
$view->addExtension(new \Slim\Views\TwigExtension(
$c['router'],
$c['request']->getUri()
));
return $view;
},
'db'=>function($c){
$capsule = new \Illuminate\Database\Capsule\Manager;
$capsule->addConnection($c['settings']['db']);
$capsule->setAsGlobal();
$capsule->bootEloquent();
return $capsule;
},
];

Test

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
namespace Core\Controller;
class Test{
private $view;
private $db;
function __construct($ci){
$this->view=$ci['view'];
$this->db=$ci['db'];
}
public function __invoke($request,$response,$args)
{
$table=$this->db->table('note');
$notes=$table->get();
return $this->view->render($response,'notes.html',['notes'=>$notes]);
}
}

模板文件省略。。。