{"id":22136187,"url":"https://github.com/qcubed/qcubed","last_synced_at":"2025-12-18T07:34:26.979Z","repository":{"id":5538614,"uuid":"6742077","full_name":"qcubed/qcubed","owner":"qcubed","description":"The official QCubed framework git repo","archived":false,"fork":false,"pushed_at":"2021-01-28T09:27:21.000Z","size":17154,"stargazers_count":56,"open_issues_count":61,"forks_count":47,"subscribers_count":22,"default_branch":"master","last_synced_at":"2025-03-31T11:21:29.365Z","etag":null,"topics":["ajax","framework","jquery","mysql","mysql-orm","php","postgresql","postgresql-orm","sql"],"latest_commit_sha":null,"homepage":"https://qcubed.eu/","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/qcubed.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2012-11-18T00:52:56.000Z","updated_at":"2024-12-12T14:29:01.000Z","dependencies_parsed_at":"2022-08-30T18:01:25.673Z","dependency_job_id":null,"html_url":"https://github.com/qcubed/qcubed","commit_stats":null,"previous_names":[],"tags_count":38,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qcubed%2Fqcubed","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qcubed%2Fqcubed/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qcubed%2Fqcubed/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qcubed%2Fqcubed/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/qcubed","download_url":"https://codeload.github.com/qcubed/qcubed/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252903080,"owners_count":21822368,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ajax","framework","jquery","mysql","mysql-orm","php","postgresql","postgresql-orm","sql"],"created_at":"2024-12-01T19:20:03.155Z","updated_at":"2025-12-18T07:34:21.934Z","avatar_url":"https://github.com/qcubed.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Getting started with QCubed\n\n[![Build Status](https://travis-ci.org/qcubed/framework.png?branch=master)](https://travis-ci.org/qcubed/framework)\n[![Test Coverage](https://codeclimate.com/github/qcubed/framework/badges/coverage.svg)](https://codeclimate.com/github/qcubed/framework/coverage)\n[![Issue Count](https://codeclimate.com/github/qcubed/framework/badges/issue_count.svg)](https://codeclimate.com/github/qcubed/framework)\n\n## Releases\n**Newest stable release: [version 3.1.0, released on July 6, 2017].\n\nThe most recent stable version of version 2 can be found in the v2 branch.\n\n## Community\n\n*Join us on Slack on [qcubed.slack.com](http://qcubed.slack.com). Get your invite [here](https://docs.google.com/forms/d/e/1FAIpQLSe0YTPSbTIFdwyVMS1VqxPK6CnfOlOVJ6Q4OfO-im2IIem5NA/viewform)*. \n\n## What is QCubed?\n\nQCubed (pronounced 'Q' - cubed) is a PHP Model-View-Controller Rapid Application Development framework with support for PHP5 (5.4 and above) and PHP7. The goal of the framework is to save development time around mundane, repetitive tasks - allowing you to concentrate on things that are useful AND fun. QCubed excels in situations where you have a large database structure that you quickly want to make available to users.\n\n## Stateful architecture\n\nWith QCubed, you don't have to deal with POSTs and GETs coming from the browser. QCubed automatically handles that for you and packages the information into object oriented forms and controls. Programming with QCubed feels very much like programming a desktop application. If you are familiar with ASP, it is similar.\n\n## The Code Generator\n\nThe Code Generator automatically creates object classes with matching forms and controls based on your database schema. It uses the concept of ORM, [object-relational mapping](http://en.wikipedia.org/wiki/Object-relational_mapping), to practically create your whole model layer for you.\n\nCodegen can take advantage of foreign key relationships and field constraints to generate ready-to-use data models complete with validation routines and powerful CRUD methods, allowing you to manipulate objects instead of constantly issuing SQL queries.\n\nMore info as well as examples are available online at \u003chttps://qcubed.eu/\u003e\n\n### Object-oriented querying\n\nUsing QQueries allows for simple yet powerful loading of models, all generated ORM classes have Query methods and QQNodes. By using these methods, getting a complex subset of data is pretty straightforward - and can be used on almost any relational database.\n\n## User Interface Library\n\nQCubed uses the concept of a QForm to keep form state between POST transactions. A QForm serves as the controller and can contain QControls which are UI components.\n\nAll QControls (including QForm itself) can use a template which is the view layer, completing the MVC structure.\n\nQControls can take advantage of the QForm's FormState to update themselves through Ajax callbacks as easily as synchronous server POSTs. All jQuery UI core widgets are available as QControls.\n\nSome QControls include:\n- QDialog\n- QTextBox\n- QListBox\n- QTabs\n- QAccordion\n\nThe easiest way to learn QCubed is to see the examples tutorial at \u003chttp://qcu.be/examples/\u003e\n\n### Plugins\n\nThrough its plugin system, QCubed makes it easy to package and deliver enhancements and additions to the core codebase. Plugins for the currently active version of QCubed live in repositories that begin with _plugin_. \n\n## System Requirements\n* A development computer that you can set up so that the browser can write to a directory in your file system.\n* v3.0.x, requires PHP 5.4 and above. PHP 7 and HHVM are supported as well.\n* All html code is html5 compliant.\n* QCubed relies on jQuery for some of its ajax interactions. Also, many of the built-in controls beyond basic html controls require JQuery UI.\n* A SQL database engine. MySQL, SqlServer, Postgres, Oracle, PDO, SqlLite, Informix adapters are included. Creating another adapter is not hard if you have a different SQL.\n\n## Installation\n\nThe installation procedure is described in detail here: [Installation instructions](https://github.com/qcubed/qcubed/blob/master/INSTALL.md \"Installation instructions\").\n\n## Upgrading\n### 2.x -\u003e 3.0\n3.0 was a major architectural change from 2.x. You should essentially start over by creating a new project, \ngenerating your models, using the ModelConnectorEditor to refine what is generated in the connectors(used to be called MetaControls),\nand then copying code from your old version to the new version. You will find that many of the things you had to do\nby hand are now done in generated code, so it might not take as long as you think. Lets hop :-)\n\n### 3.0 -\u003e 3.1\nv3.1 Now has change tracking in the models. Instead of pushing an entire object to the database\nevery time you save an object, it only pushes the data that has changed. To do this, it makes the member variables\nin the generated model superclass private instead of protected, which may require you to change code in your\nmodel subclass. To help with the transition, the new private variable feature is turned off by default. You will\nneed to turn it on by editing the codegen_settings.xml file and adding a 'privateColumnVars=\"true\"' parameter to the createOptions tag.\nSee the codegen_settings.xml file in the qcubed/install/project/configuration directory for an example.\n\nThis will make all of the protected column variables that are in the Gen class private, so you will not be able to access them\ndirectly from your Model subclasses. For example, if you have a \"Name\" column in a table, you can do:\n ```php\n $strName = $this-\u003eName;\n ```\n or better yet:\n```php\n$strName = $this-\u003egetName();\n```\nbut not:\n```php\n$strName = $this-\u003estrName;\n```\n\n```$this-\u003eName``` routes to ```$this-\u003egetName()```\n\nAlso, instead of this:\n```php\n$this-\u003estrName = $strName;\n```\n\ndo:\n```php\n$this-\u003esetName($strName);\n```\nor\n```php\n$this-\u003eName = $strName;\n```\n\nThe benefits of the new feature include better performance, reduced OptimisticLocking exceptions, and preventing you from accidentally\naccessing a value that was not loaded due to a QSelect clause. Also, QSelect can\nnow be used to control what is generated when you convert an object to other\nformats like JSON.\n\n### 3.1 -\u003e 4.0\nv4.0 is another major architectural change, designed to support the PSR-1, PSR-2 and PSR-4 standards. v4 adds \nnamespaces to all the core and library files. Gone is the letter 'Q' in front of all the core classes, since\nthat was essentially our way of doing namespacing before namespaces were available in PHP. \n\nIt includes tools to help automate changing your code from v3.x code to v4.0. See the Readme file in the \nqcubed/application repository for more information.\n\n\n## Latest commits\n\nA list of the latest changes is available at https://github.com/qcubed/qcubed/commits/master\n\n## Credits\n\nQCubed was branched out of QCodo, a project by Michael Ho. QCubed relies on JQuery and uses jQuery UI libraries for some of its core controls.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fqcubed%2Fqcubed","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fqcubed%2Fqcubed","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fqcubed%2Fqcubed/lists"}