Autor Wątek: Uchylmy rąbka tajemnicy  (Przeczytany 3210 razy)

0 użytkowników i 1 Gość przegląda ten wątek.

Offline mruz

  • Administrator
  • *****
  • Wiadomości: 453
  • Karma: +15/-0
  • Płeć: Mężczyzna
    • Zobacz profil
Uchylmy rąbka tajemnicy
« dnia: Listopad 07, 2014, 11:54:41 »
Jak wiecie z tematu Nowy framework w C od jakiegoś czasu pracuję nad własnym frameworkiem. Będzie się on zwał Ice framework , dlaczego lód? bo jest zamrożony w rozszerzeniu php, a ja jestem mruz ;D


Już wiele rzeczy działa, ale jeszcze nie ma jako takiej stabilności. Będę też potrzebował pomocy przy dokumentowaniu i pisaniu testów, bo na razie to odkładam i odkładam.. Przygotowuję również bazową aplikację podobną do tej, którą zrobiłem w Phalconie.
Z racji, że napisany w C będzie równie szybki jak Phalcon, będzie mniejszy, wiec może szybszy, dodatkowo np. FastRoute, własny system szablonów sleet i różne inne fajne rzeczy.

Żeby nie przynudzać, tak mniej więcej np. będzie wyglądać walidacja:
Kod: php [Zaznacz]

$validation = new \Ice\Validation();

$validation->rules([
    'username' => 'required|length:4,24|notIn:admin,user,root|unique:users',
    'password'  => 'required|length:5,32',
    'repeatPassword'  => 'same:password',
    'email'  => 'email',
    'status'  => 'required|digit|in:0,1,2',
    'website'  => 'url',
    'title'  => 'length:,100',
    'age'  => 'required|between:18,21',
]);
$validation->setLabels([
    'repeatPassword' => 'Repeat password'
]);
$valid = $validation->validate($_POST);
if (!$valid) {
    $messages = $validation->getMessages();
}

Oczywiście będzie można dodawać pojedynczo, arrayem (np. dla regex pattern) czy obiekty.


Jest również automatyczna walidacja modeli. Najpierw we fields ustalamy prawidłowe pola, które będą zapisane, np. z $_POST:
<?php
namespace App\Models;

use Ice\Auth\Driver\Model\Users as AuthUsers;
use Ice\Validation;

class Users extends AuthUsers
{
    protected $_fields = [
        'id',
        'email',
        'username',
        'password',
    ];
Reguły walidacji:
    protected $_rules = [
        'username' => 'required"length:4,24|notIn:admin,user,root|unique:users',
        'password'  => 'required|length:5,32',
        'email'  => 'required|email|unique:users',
    ];
I labele w komunikatach:
    protected $_labels = [
        'username' => 'Username',
        'password' => 'Password',
        'email' => 'Email',
    ];

A potem np. przy rejestracji:
Kod: php [Zaznacz]

public function signup()
{
    $di = $this->getDi();
    $auth = $di->auth;
    // Hak po walidacji a przed zapisaniem - zahashowanie hasła
    $di->hook('model.after.validate', function ($fields) use($auth) {
        $fields['password'] = $di->auth->hash($fields['password']);

        return $fields;
    });

    // Dodatkowa walidacji dla pól takich jak CSRF token, password verification, albo CAPTCHA
    $extra = new Validation($_POST);
    $extra->rules([
        'repeatPassword'  => 'same:password',
        'repeatEmail'  => 'same:email',
    ]);
    $extra->setLabels([
        'repeatPassword' => 'Repeat password',
        'repeatEmail' => 'Repeat email',
    ]);

    // Tylko prawidłowe pola z _POST będą zapisane
    if ($this->create($_POST, $extra) === true) {
        return $this;
    } else {
        return false;
    }
}


Oczywiście jest już Auth:
Kod: php [Zaznacz]

$options = ['hash_key' => 'secret key'];
$this->di->auth = new \Ice\Auth($options);

$login = $this->auth->login($this->request->getPost('username'), $this->request->getPost('password'), $this->request->getPost('remember') ? TRUE : FALSE);
if (!$login) {
    // Login failed, send back to form with error message
} else {
    // Login successful
}

if ($this->auth->loggedIn()) {
    // User is logged in, continue on
    $user = $this->auth->getUser();
    $username = $user->username;
} else {
    // User isn't logged in, redirect to the login form.
}

if ($this->auth->loggedIn('admin')) {
    // Admin privileges
} else {
    // No access
}


Jest klasa Tag z podobnymi metodami jak w Phalconie (podobnymi nazwami, ale z innym body..).
Kod: twig [Zaznacz]

<p>{{ link_to(['user/signin', __('Sign in')]) }}</p>
{{ a(["/", img(["img/logo.png", "width": 80])]) }}


Można używać klas w widokach:
Kod: twig [Zaznacz]

{% set post = \App\Models\Posts::findOne(1) %}
{{ post.getUser().username }}


Co myślicie?
« Ostatnia zmiana: Luty 11, 2015, 09:45:16 wysłana przez mruz »
Wesprzyj moją pracę i kup mi czekoladę ;) Link do dotacji na mruz.me

Offline zaba

  • Świeży
  • *
  • Wiadomości: 22
  • Karma: +1/-0
    • Zobacz profil
Odp: Uchylmy rąbka tajemnicy
« Odpowiedź #1 dnia: Listopad 07, 2014, 18:25:47 »
Wyglada jak by był bardziej skomplikowany niz phalcon tak mi sie wydaje

Offline mruz

  • Administrator
  • *****
  • Wiadomości: 453
  • Karma: +15/-0
  • Płeć: Mężczyzna
    • Zobacz profil
Odp: Uchylmy rąbka tajemnicy
« Odpowiedź #2 dnia: Listopad 07, 2014, 20:33:14 »
Może takie złudzenie, bo jest parę rzeczy co ułatwia. Z walidacją można w tradycyjny sposób:
$validation->rule('title', new Length(array(
    'min' => 5,
    'max' => 100
)));
Wesprzyj moją pracę i kup mi czekoladę ;) Link do dotacji na mruz.me

Offline michalmw

  • Świeży
  • *
  • Wiadomości: 4
  • Karma: +0/-0
    • Zobacz profil
Odp: Uchylmy rąbka tajemnicy
« Odpowiedź #3 dnia: Listopad 14, 2014, 21:49:50 »
Hmm.. Największą zmorą frameworków php jest.. brak integracji z frontendowcami.

Proponuje postawić na to, a dobra reklama nie będzie Ci potrzebna ;). AngularJs.. Przy phalconie się nadenerwowałem bardzo na ten piękny język on naszeog monopolisty google :)...

Proponuje dobrą integrację zrobić i nasza firma chętnie wczyta się w dokumentacje twójego frameworka (wiadomo jak dokumentacje stworzysz :)).


Offline mruz

  • Administrator
  • *****
  • Wiadomości: 453
  • Karma: +15/-0
  • Płeć: Mężczyzna
    • Zobacz profil
Odp: Uchylmy rąbka tajemnicy
« Odpowiedź #4 dnia: Listopad 14, 2014, 23:15:15 »
Jeszcze gorący :) github.com/ice/framework, no i bazowa aplikacja github.com/ice/base - na dniach postawię jej demo. System szablonów na razie prosty i dziurawy, ale można zobaczyć SleetTest jak parser działa.

Teraz muszę dopracować, podokumentować kod, wygenerować ide, a potem prostą dokumentację ;)
« Ostatnia zmiana: Listopad 14, 2014, 23:26:57 wysłana przez mruz »
Wesprzyj moją pracę i kup mi czekoladę ;) Link do dotacji na mruz.me