Jii — фреймворк,
который Вы уже знаете

Архитектура и API фреймворка Jii полностью базируется на PHP фреймворке Yii 2.0, взяв из него лучшие стороны и сохраняя преимущества JavaScript.

Соответствие API значительно снижает порог вхождения в Jii Framework.

Что есть и что будет?

Уже реализовано

  • Конструктор запросов, Active Record (MySQL), Валидация моделей
  • HTTP сервер с роутингом и генерацией URL
  • Структурные составляющие: Приложение, Модуль, Компонент...
  • Использование Jii в браузере
  • Масштабируемый и устойчивый к нагрузкам комет-сервер и клиент
  • ...

Ближайшие планы

  • Клиент-сервер биндинги для синхронизации данных
  • Аутентификация и авторизация
Есть пожелания или предложения? Пиши на affka@affka.ru

Пример простейшего приложения

Ниже представлен пример простейшего приложения, которое запускает веб-сервер и генерирует страницу с надписью "Hello World".

/**
 * @class app.controllers.SiteController
 * @extends Jii.base.Controller
 */
Jii.defineClass('app.controllers.SiteController', {

	__extends: 'Jii.base.Controller',

	/**
	 *
	 * @param {Jii.base.Context} context
	 * @param {Jii.request.http.Request} context.request
	 * @param {Jii.request.http.Response} context.response
	 */
	actionIndex(context) {
		// Данный метод вызывается, когда происходит обращение к корню сайта. Это правило прописано
		// в конфигурации приложения (urlManager -> rules -> '': 'site/index')

		// При HTTP запросах, контекст имеет объекты запроса и ответа, через которые
		// можно получить GET, POST параметры и отправить данные клиенту

		// Генерируем HTML страницы: макет `layouts/main` + представление `site/index`
        return this.render('index', {
            text: 'Hello World!'
        });
	}

});
<!DOCTYPE html>
<html lang="<%- Jii.app.language %>">
<head>
    <meta charset="<%- Jii.app.charset %>">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>My Application</title>

    <!-- head(), beginBody(), endBody() - это маркеры, на место
        которых приложение может добавлять js/css код -->
    <%= this.head() %>
</head>
<body>
<%= this.beginBody() %>

<!-- HTML представления (site/index.ejs) -->
<%= content %>

<%= this.endBody() %>
</body>
</html>
<h1>
    <%= text %>
</h1>
// В большинстве случаев класс-неймспейс Jii можно расположить глобально,
// чтобы не вызывать `require('jii')` в каждом файле
global.Jii = require('jii');

// Подгружаем js файлы приложения (шаблоны подгрузятся автоматически)
require('./controllers/SiteController');

// Создаём экземпляр приложения, он будет доступен через Jii.app
Jii.createWebApplication({
	application: {
		basePath: __dirname,
		components: {
			urlManager: { // Роутер
				className: 'Jii.request.UrlManager',
				rules: {
					'': 'site/index'
				}
			},
			http: { // HTTP сервер
				className: 'Jii.request.http.HttpServer'
			},
			view: { // Компонент для генерации HTML
				className: 'Jii.view.ServerWebView'
			}
		}
	}
});

// Запускаем веб-сервер
Jii.app.http.start();
{
  "name": "app-hello-world",
  "version": "0.0.1",
  "private": true,
  "dependencies": {
    "jii": "*"
  }
}

А я могу чем-то помочь?

Конечно! Сейчас я разрабатываю фреймворк один, в свободное от работы время, которого всегда не хватает. Поэтому:

Во-первых, ты можешь вступить в команду разработчиков — просто свяжись со мной.

Во-вторых, если тебе нравятся мои труды, то ты можешь поддержать проект финансово. Это мотивирует меня уделять проекту ещё больше времени.

В-третьих, ты можешь просто рассказать о фреймворке коллегам, им наверняка будет интересно!