wisembly/ silexcms
基于Silex的轻量级CMS
0.2.7
2014-01-31 08:52 UTC
Requires
- php: >=5.3.2
- doctrine/dbal: 2.2.*
- knplabs/console-service-provider: dev-master#1f1a331
- silex/silex: ~1.0.0
- symfony/browser-kit: 2.2.*
- symfony/config: 2.1.*
- symfony/form: 2.1.*
- symfony/translation: 2.1.*
- symfony/twig-bridge: 2.1.*
- symfony/validator: 2.1.*
- symfony/yaml: 2.1.*
- twig/extensions: 1.0.*
- twig/twig: >=1.8,<2.0-dev
Requires (Dev)
- phpunit/phpunit: ~3.7.0
- symfony/debug: 2.4.*
README
关于
本项目旨在提供一个最小化工具集,帮助创建企业网站。使用 Silex 作为主要框架,它包含多个简写类。
版本
0.1.0
示例
我们使用SilexCMS为我们自己的企业网站。您可以在wisembly.com上看到它的工作状态,并查看github.com/wisembly/wisembly。
文档
页面
有两种类型的网页:静态和动态。
静态页面不依赖于其他任何东西,只依赖于它们的模板。动态页面在其URL中接受参数,获取一个表,然后渲染指定的模板,并将结果对象存储在一个可访问的变量中。
静态页面
$app->register(new SilexCMS\Page\StaticPage('/', 'home.html.twig'));
动态页面
$app->register(new SilexCMS\Page\DynamicPage('/product/{slug}', 'product.html.twig'));
{% if app.set not none %}
Our product is called {{ app.set.name }} :)
{% else %}
Product not found :(
{% endif %}
数据集
数据集是一个简单便捷的方法,可以直接在Twig模板中检索数据库数据。首先,为您的应用程序注册可用的数据集
$app->register(new DataSet('twig_name', 'table_name')); $app->register(new DataSet('users', 'user'));
然后,在您的Twig模板中使用它们
{# Tell in your template that you will need users DataSet loaded in app #}
{% bloc users %}{% endbloc %}
{# Then use it freely in your template in app var #}
First user name: {{ app.users[0].name }}
Users emails:
{% for user in app.users %}
email: {{ user.email }}
{% endfor %}
键值集
键值集是一个简单便捷的方法,可以直接在Twig模板中从数据库中检索键 => 值集。它们像上面的数据集一样工作,但允许在模板中不同的方式访问值。
$app->register(new DataSet('twig_name', 'table_name', 'key_name')); $app->register(new DataSet('messages', 'messages', 'key'));
对于以下集合
| key | value |
| foo | bar |
| bar | baz |
在您的模板中,您可以这样做
{% bloc messages %}{% endbloc %}
{# will output "bar" #}
foo value is: {{ app.messages.foo }}
外部的Twig扩展
SilexCMS提供了一个Twig扩展,可以轻松通过id引用在数据集中检索特定对象
首先,加载外键扩展
$app['twig']->addExtension(new \SilexCMS\Twig\Extension\ForeignKeyExtension($app));
然后,在您的Twig模板中使用它
{% block books %}{% endblock %}
{% block categories %}{% endblock %}
{% set category = foreign(app.categories, app.books[0].category_id) %}
The 1rst book category is: {{ category.name }}
安全
安全类提供了一个非常简单的方式来识别某些用户。
在实例化防火墙时,您只需要提供一个名称和包含您的用户认证信息(键将是用户名,值是纯文本密码)的数组。将在变量 app[name]
中自动创建一个日志实例。
从那时起,您可以使用这个记录器来检查当前用户状态或更改它。
手动示例
$app->register(new SilexCMS\Security\Firewall('main', array('user' => 'pass'))); var_dump($app['main']->getUsername()); // null $app['main']->bindUsername('user'); var_dump($app['main']->getUsername()); // "user"
请求示例
如果请求至少有两个参数: _username
和 _password
,您还可以绑定请求。
startup.php
$app->register(new SilexCMS\Security\Firewall('security', array('user' => 'pass'))); $app->register(new SilexCMS\Page\StaticPage('/login', 'login.html.twig')); $app->register(new SilexCMS\Page\StaticPage('/login/success', 'login/success.html.twig')); $app->register(new SilexCMS\Page\StaticPage('/login/failure', 'login/failure.html.twig')); $app->post('/post', function (Application $app, Request $req) { $security = $app['security']; if ($security->bindSession()->getUserName() || $security->bindRequest($req)->getUserName()) { return $app->redirect('login/success'); } else { return $app->redirect('login/failure'); } });
login.html.twig
<form action="/login" method="post"> <input type="text" name="_password" /><br /> <input type="password" name="_password" /><br /> <input type="submit" /> </form>
许可
SilexCMS遵循MIT许可。