Silex:Usage使用用例(一)

1/安装
composer require silex/silex:~2.0

目录结构:
├── composer.json
├── composer.lock
├── vendor
│   └── ...
└── web
    └── index.php

2/Web服务 : nginx的配置 http://silex.sensiolabs.org/doc/master/web_servers.html

3/引导:
require_once DIR.’/../vendor/autoload.php’;

create a instance of Silex\Application 建立一个实例

定义controller后调用 run 方法。

$app['debug'] = true; 开启debug

4/路由:

在silex中你定义一个路由,当该路由被访问时调用响应的controller,一个路由组成为:
    1,pattern:路由pattern定义了指向资源的路径,一个pattern可以包含多条部分。
    2 , Method:HTTP 方法:GET/POST/PUT等

一个controller使用如下的闭包定义:

function () {
// ... do something
}

闭包的返回值成为页面的一部分。

GET路由的例子:

$blogPosts = array(
1 => array(
    'date'      => '2011-03-29',
    'author'    => 'igorw',
    'title'     => 'Using Silex',
    'body'      => '...',
),);

$app->get('/blog', function () use ($blogPosts) 
{
    $output = '';
    foreach ($blogPosts as $post) {
        $output .= $post['title'];
        $output .= '<br />';
    }

    return $output;
});
访问/blog 将返回一个blog post title 的列表。

5/动态路由:
创建另一个控制器来支持展示私人博客帖子。

$app->get('/blog/{id}', function (Silex\Application $app, $id) use ($blogPosts) {
if (!isset($blogPosts[$id])) {
    $app->abort(404, "Post $id does not exist.");
}

$post = $blogPosts[$id];

return  "<h1>{$post['title']}</h1>".
        "<p>{$post['body']}</p>";
});

6/POST路由:
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;

$app->post('/feedback', function (Request $request) 
{
    $message = $request->get('message');
    mail('feedback@yoursite.com', '[YourSite] Feedback', $message);

    return new Response('Thank you for your feedback!', 201);
});

7/其他方法

8/路由变量:
可以在路由中定义变量:
app>get(/blog/id,function( id) {
// …
});

还可以定义多个变量
$app->get('/blog/{postId}/{commentId}', function ($postId, $commentId) {
// ...
});

还可以这样(注意参数位置)
$app->get('/blog/{postId}/{commentId}', function ($commentId, $postId) {
// ...
});

你还可以请求当前的Request请求和Application对象
$app->get('/blog/{id}', function (Application $app, Request $request, $id) {
// ...
});

9/路由变量转换器:
在路由变量进入controller判断之前,还可以添加一些转换器
app>get(/user/id,function( id) {
// …
})->convert(‘id’, function (id) { return (int)id; });

这在你想转换路由变量成为对象以便在不同控制器中重复转换编码时很有用。

$userProvider = function ($id) {
return new User($id);
};

$app->get('/user/{user}', function (User $user) {
    // ...
})->convert('user', $userProvider);

$app->get('/user/{user}/edit', function (User $user) {
    // ...
})->convert('user', $userProvider);

还可以接受Requset请求作为第二参数
$callback = function ($post, Request $request) {
    return new Post($request->attributes->get('slug'));
};

$app->get('/blog/{id}/{slug}', function (Post $post) {
    // ...
})->convert('post', $callback);简直碉堡了

转换器还可以被定义为service。

use Doctrine\Common\Persistence\ObjectManager;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;

class UserConverter
{
    private $om;

    public function __construct(ObjectManager $om)
    {
      $this->om = $om;
    }

    public function convert($id)
    {
        if (null === $user = $this->om->find('User', (int) $id)) {
            throw new NotFoundHttpException(sprintf('User %d does not exist', $id));
        }

        return $user;
    }
}
service 需要在 application 中注册,它的convert方法将被作为转换器
$app['converter.user'] = function () {
    return new UserConverter();
};

$app->get('/user/{user}', function (User $user) {
    // ...
})->convert('user', 'converter.user:convert');

10/Requirements请求

11/条件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值