2017 © Pedro Peláez
 

library silexcms

Ultra lightweight CMS based on top of Silex

image

wisembly/silexcms

Ultra lightweight CMS based on top of Silex

  • Thursday, September 18, 2014
  • by guillaumepotier
  • Repository
  • 26 Watchers
  • 25 Stars
  • 98 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 2 Forks
  • 0 Open issues
  • 10 Versions
  • 0 % Grown

The README.md

SilexCMS

About

This project aims to provide a minimal toolset helping to create corporate websites. Using Silex as primary framework, it includes multiple shorthand classes., (*1)

Version

0.1.0, (*2)

Examples

We use SilexCMS for our coroporate website. You could see it live at wisembly.com and have a look to github.com/wisembly/wisembly, (*3)

Documentation

Pages

There is two kind of web pages : statics and dynamics., (*4)

Static pages does not rely on anything else than their templates. Dynamic ones take parameters in their urls, fetch a table, then render the specified template, storing the resulting objects in an accessible variable., (*5)

Static Page

$app->register(new SilexCMS\Page\StaticPage('/', 'home.html.twig'));

Dynamic Page

$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 %}

DataSets

Datasets are an easy and handy way to retrieve database data directly in your Twig templates. First, register your available DataSets for your application:, (*6)

$app->register(new DataSet('twig_name', 'table_name'));
$app->register(new DataSet('users', 'user'));

Then, use them in your Twig templates:, (*7)

{# 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 %}

KeyValueSets

KeyValueSets are an easy and handy way to retrieve from your database key => values sets in your Twig templates. They work like DataSets above, but allows to access values differently in your templates., (*8)

$app->register(new DataSet('twig_name', 'table_name', 'key_name'));
$app->register(new DataSet('messages', 'messages', 'key'));

For the following set:, (*9)

| key | value |
| foo | bar   |
| bar | baz   |

In your template you could then use:, (*10)

{% bloc messages %}{% endbloc %}

{# will output "bar" #}
foo value is: {{ app.messages.foo }}

Foreign Twig extension

SilexCMS provides a Twig Extension to retrieve easily a particular object by id reference inside a DataSet, (*11)

First, load Foreign Key Extension, (*12)

$app['twig']->addExtension(new \SilexCMS\Twig\Extension\ForeignKeyExtension($app));

Then, use it that way in your Twig Templates:, (*13)

{% block books %}{% endblock %}
{% block categories %}{% endblock %}
{% set category = foreign(app.categories, app.books[0].category_id) %}
The 1rst book category is: {{ category.name }}

Security

The security classes give a very simple way to identifying some users., (*14)

When instanciating a Firewall, you will only have to provide a name and an array containing your users authentification infos (where the key will be their usernames and values are plain text passwords). A logger instance will be automagically created in the app[name] variable., (*15)

From then, you can use this logger to check current user state or change it., (*16)

Manual example

$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"

Request example

You can also bind requests if they have at least two parameters : _username and _password., (*17)

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>

License

SilexCMS is licensed under the MIT license., (*18)

The Versions