User Tools

Site Tools


getting_started

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
getting_started [2019/09/28 14:28] – created sahlgetting_started [2024/02/14 14:16] (current) sahl
Line 3: Line 3:
 ===== Background ===== ===== Background =====
  
-Platform is a PHP framework developed by Michael Sahl. The framework is intended to make development of PHP applications very fast, and making it easy to implement new ideas. At the same time the framework is intended to be very basic and easy to understand, in opposition to most modern PHP frameworks which is abstract and have considerable learning curve.+Platform is a fullstack PHP framework designed for database-dependent applications, with a closely tie between PHP objects and objects in databases. The frontend part is based on JQuery, but can be skipped entirely or integrated with other more complex frameworks 
 + 
 +The framework is intended to make development of PHP applications very fast, and making it easy to implement new ideas. At the same time the framework is intended to be very easy to understand and adapt and does not introduce any complex topics on top of the programming languages already used.  
 + 
 +===== Software requirements ===== 
 + 
 +Platform runs on PHP and requires MySQL (or compatible) database. It is expected to run on Linux.
  
 ===== Architecture of platform apps ===== ===== Architecture of platform apps =====
  
-Platform application consist of one or more //instances// which are self-contained instances of the application, each having their own database and file structure. A simple application targeted at single users, could be a single instancewhile a complex app targeted at companies and their employees could implement an instance for each company.+Platform can either be configured as a single-application framework, which then only supports a single application, or it can be configured for running //instances//which are unlimited copies of the same application, each with their own database and file structure. 
 + 
 +Programming something like Facebook would be considered a single applicationsince every user on the platform is using the same application and interact with each other. Programming something like Confluence, would be done with instances, since each organization should have their own instance of the software, where the data shouldn't be mixed with the data of any other organization.
  
 ===== Installing platform ===== ===== Installing platform =====
  
-Copy the code into your website folder and edit config.php to fit your needs.+Copy the code into your website folder and go to the website rootAn interactive procedure will guide you through configuring the platform. You will need to have your database credentials ready, and decide where Platform is going to store files, and make these locations writeable by the web user.
  
-<code php> +Platform4PHP will write a configuration file one level up from the web site rootso it need to be able to do so.
-$platform_configuration = array( +
-    'global_database_server' => 'DATABASE SERVER NAME', +
-    'global_database_username' => 'USERNAME FOR DATABASE', +
-    'global_database_password' => 'PASSWORD FOR DATABASE', +
-    'global_database_name' => 'NAME FOR GLOBAL DATABASE', +
-     +
-    'instance_database_name' => 'NAME FOR INSTANCE DATABASES',+
  
-    'dir_store' => 'PATH TO STORAGE FOLDER', +If you are configuring for instancesthen the local database user should have full permissionsincluding creating and dropping databases, as it is needed when creating instances.
-    'dir_temp' => 'PATH TO TEMP FOLDER', +
-     +
-    'password_salt' => 'SALT TO USE FOR PASSWORDS' +
-); +
-</code>+
  
-The database user should have full right including rights to create and drop databases as it is expected to do that when creating instances.+Store folders should be writable for the web user, but doesn'have to reside in the web root.
  
-Folders should be writable by the web server user and the cron job user. +Lastly you need to setup a PHP cron job, if you want to use the Platform Scheduler.
- +
-When finished save the file and go to https://YOURSERVERNAME/install/index.php and Platform will create basic database structures. +
- +
-Now you are ready to start coding!+
  
 ===== Demo example ===== ===== Demo example =====
Line 43: Line 35:
 A new instance have now been created with a test user. Observe that a new database is created. You can log out of this instance and into it again. You can also create further instances if you want to, or destroy the instances you have already created. A new instance have now been created with a test user. Observe that a new database is created. You can log out of this instance and into it again. You can also create further instances if you want to, or destroy the instances you have already created.
  
-==== Source code walkthrough ==== +===== Where to go next? =====
- +
-We start in ''/demo/create/index.php'' which is the code that creates a new instance. +
-<code php [enable_line_numbers="true"]> +
-<?php +
-include $_SERVER['DOCUMENT_ROOT'].'Platform/include.php'; +
- +
-pagestart('Create new instance'); +
- +
-$new_instance_form new \Platform\Form('new_instance_form', 'new_instance.frm'); +
- +
-$new_instance_form->addValidationFunction(function($new_instance_form) { +
-    // Check if instance if taken +
-    if (\Platform\Instance::getByTitle($_POST['instancetitle'])) { +
-        $new_instance_form->getFieldByName('instancetitle')->triggerError('Instance name already in use'); +
-        return false; +
-    } +
-    return true; +
-}); +
- +
-if ($new_instance_form->isSubmitted() && $new_instance_form->validate()) { +
-    $values $new_instance_form->getValues(); +
-    $instance \Platform\Instance::initialize($values['instancetitle'], $values['username'], $values['password']); +
-    if ($instance instanceof \Platform\Instance) { +
-        // Instance was created. Login and continue. +
-        $instance->activate(); +
-        $loginresult \Platform\User::tryLogin($values['username'], $values['password']); +
-        if ($loginresult) { +
-            header('location: /demo/app/'); +
-            exit; +
-        } +
-        $new_instance_form->getFieldByName('instancetitle')->triggerError('Instance was created, but a login couldn\'t be performed.'); +
-    } else { +
-        $new_instance_form->getFieldByName('instancetitle')->triggerError('A new instance couldn\'t be initialized!'); +
-    } +
-+
- +
-echo '<div class="w3-container w3-teal">'; +
-echo '<h1>Create instance</h1>'; +
-echo '</div>'; +
- +
-echo '<div class="w3-container">'; +
-$new_instance_form->render(); +
-echo '</div>'; +
- +
-echo '<div class="w3-container w3-gray" style="font-style: italic; font-size: 0.8em;">'; +
-echo 'Platform'; +
-echo '</div>'; +
- +
-pageend(); +
-</code> +
- +
-Line 4 outputs the start of the page including the starting html-tag, the head-section and the starting body tag. See [[Design class]] for more info. +
- +
-In line 6 we create a form to create the instance, which is easily accomplished using the special form file format. In line 8 we add an additional validation function to the form, which check that the name of the instance isn't already used, and triggers an error on the appropriate form field, if this is the case.+
  
-In line 17 we check for a form submission and validates the form. If the form is submitted and is valid, we initializes a new instance in line 19, activate it (22) and performs a login (23). If all of this is successful the instance is created and the user is logged in, so we redirect to the app.+You can start by navigating to the [[tutorial]] which explains in detail how the demo is constructed from scratch going through all the possibilities in Platform.
  
-See more in the [[Form class]] and the [[Instance class]].+Otherwise go to the [[classes]] hierarchy to browse the different platform components or start building your own application. The first step in building your own application is to create a subclass of the [[Instance class]] to contain your own objects and logic, which is implemented using the [[Datarecord class]]. For the frontend part of Platform start with the [[Component class]].
  
-The rest of the page is just layout, with the form being outputted in line 39.+Otherwise it is just to explore the other classes in Platform and start coding away. The aim of Platform is to be easy and highly productivekeeping focus on your own ideas while handling all basic things such as database objects, forms, tables and other things as easy and with as little code as possible.
getting_started.1569680908.txt.gz · Last modified: 2019/09/28 14:28 by sahl

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki