IPC 2015 ZF2rapid

Ralf Eggert
Ralf EggertGeschäftsführer / Gründer at Travello GmbH
1 / 38
ZF2rapidZF2rapid
Zend Framework 2 Anwendungen im HandumdrehenZend Framework 2 Anwendungen im Handumdrehen

Repository: https://github.com/RalfEggert/ipc2015-zf2rapidRepository: https://github.com/RalfEggert/ipc2015-zf2rapid
2 / 38
www.ralfeggert.dewww.ralfeggert.de
Über michÜber mich
Fragen an das PublikumFragen an das Publikum
33 // 3838
[b01][b01]
[B02][B02]
44 // 3838
ZF2rapid in a nutshellZF2rapid in a nutshell
5 / 38
ZFrapidZFrapid
http://zfrapid.org/
https://github.com/ZFrapid
ZF2 MVC
(ZF3 MVC)
(ZF3 Middleware)
ProjekteProjekte ModuleModule Code GenerierungCode Generierung
Routing & MapsRouting & Maps KonfigurationKonfiguration CRUDCRUD
6 / 38
[B05][B05][B04][B04][B03][B03]
[B08][B08][B07][B07][B06][B06]
ZF2rapid FeaturesZF2rapid Features
7 / 38
// Mit Git clonen und mit Composer installieren
$ cd /home/devhost/
$ git clone https://github.com/ZFrapid/zf2rapid.git zf2rapid
$ cd zf2rapid
$ composer install
// Lokale Installation testen
$ ./bin/zf2rapid.php
// Dynamischen Link erstellen
$ sudo ln -s /home/devhost/zf2rapid/bin/zf2rapid.php /usr/local/bin/zf2rapid
// Details zur Installation (auch unter Windows) unter
// https://github.com/ZFrapid/zf2rapid/blob/master/docs/installation.md
ZF2rapid InstallationZF2rapid Installation
[b03][b03]
88 // 3838
ProjekteProjekte
9 / 38
$ zf2rapid create-project --help
===========================================================================
Usage:
create-project [--workingPath=]
Arguments:
--workingPath= The path to work in; defaults to current working path
Help:
Create a new ZF2 project within the specified path
===========================================================================
$ cd /home/devhost/
$ zf2rapid create-project --workingPath=myproject
$ cd myproject/
Projekt anlegenProjekt anlegen
10 / 38
$ zf2rapid tool-config
{
"configFileFormat": "php",
"flagAddDocBlocks": "true",
"fileDocBlockText": "ZF2 Application built by ZF2rapid",
"fileDocBlockCopyright": "(c) 2015 John Doe",
"fileDocBlockLicense": "http://opensource.org/licenses/MIT MITLicense",
"namespaceController": "Controller",
"namespaceControllerPlugin": "ControllerPlugin",
"namespaceViewHelper": "ViewHelper",
"namespaceFilter": "ModelFilter",
"namespaceValidator": "ModelValidator",
"namespaceInputFilter": "ModelInputFilter",
"namespaceForm": "Form",
"namespaceHydrator": "ModelHydrator",
"namespaceEntity": "ModelEntity",
"namespaceTableGateway": "ModelTableGateway",
"namespaceRepository": "ModelRepository"
}
Projekt konfigurierenProjekt konfigurieren
[b04][b04]
1111 // 3838
ModuleModule
12 / 38
$ zf2rapid create-module --help
===========================================================================
Usage:
create-module <module> [--workingPath=] [--configFile=]
[--without-project] [--no-activation]
Arguments:
<module> The name of the module to create; mandatory
--workingPath= The path to work in; defaults to current working path
--configFile= Specify the configuration file to activate or
deactivate a module in; defaults to not bet set
--without-project Ignore if working path does not contain a ZF2 project;
defaults to current working path
--no-activation Prevent the activation of the new module (disabled by
default)
Help:
Create a new module within the specified path
===========================================================================
Modul anlegenModul anlegen
13 / 38
// Modul anlegen
$ zf2rapid create-module Shop
// Modul löschen
$ zf2rapid delete-module Shop
// Modul aktivieren
$ zf2rapid activate-module Shop
// Modul deaktivieren
$ zf2rapid deactivate-module Shop
// Konfigurationsdatei mit angeben
$ zf2rapid create-module Shop --configFile=development.config.php
// Modul unabhängig vom Zend Framework 2 Projekt anlegen
$ zf2rapid create-module Shop --without-project --workingPath=/some/where
Mit Modulen arbeitenMit Modulen arbeiten
[b00][b00]
1414 // 3838
Code anschauenCode anschauen
[b05][b05]
1515 // 3838
Code generierungCode generierung
16 / 38
$ zf2rapid create-controller --help
===========================================================================
Usage:
create-controller <module> <controller> [--workingPath=]
[--without-project] [--no-factory]
Arguments:
<module> The name of the module to create the controller in;
mandatory
<controller> The name of the controller to create; mandatory
--workingPath= The path to work in; defaults to current working path
--without-project Ignore if working path does not contain a ZF2 project;
defaults to current working path
--no-factory Prevent the creation of a factory for the new
controller
Help:
Create a new controller for module within the specified path
===========================================================================
Controller anlegenController anlegen
17 / 38
$ zf2rapid create-action --help
===========================================================================
Usage:
create-action <module> <controller> <action>
[--workingPath=] [--without-project]
Arguments:
<module> The name of the module to create the controller action
in; mandatory
<controller> The name of the controller to create an action for;
mandatory
<action> The name of the new action to create; mandatory
--workingPath= The path to work in; defaults to current working path
--without-project Ignore if working path does not contain a ZF2 project;
defaults to current working path
Help:
Create a new controller action for module within the specified path
===========================================================================
Action anlegenAction anlegen
18 / 38
$ zf2rapid create-view-helper --help
===========================================================================
Usage:
create-view-helper <module> <viewHelper> [--workingPath=]
[--without-project] [--no-factory]
Arguments:
<module> The name of the module to create the view helper in;
mandatory
<viewHelper> The name of the view helper to create; mandatory
--workingPath= The path to work in; defaults to current working path
--without-project Ignore if working path does not contain a ZF2 project;
defaults to current working path
--no-factory Prevent the creation of a factory for the new view
helper
Help:
Create a new view helper for module within the specified path
===========================================================================
View Helper anlegenView Helper anlegen
19 / 38
// Validator anlegen
$ zf2rapid create-validator Shop Basket
// Hydrator anlegen, der ClassMethods Hydrator erweitert
$ zf2rapid create-hydrator Shop Basket --baseHydrator=ClassMethods
// Formular anlegen
$ zf2rapid create-form Shop Basket
// Alle Module anzeigen
$ zf2rapid show-modules
// Alle Controller anzeigen
$ zf2rapid show-controllers
// Alle Aktionen anzeigen
$ zf2rapid show-actions
Weitere MöglichkeitenWeitere Möglichkeiten
[b00][b00]
2020 // 3838
Code anschauenCode anschauen
[b06][b06]
2121 // 3838
Routing & MapsRouting & Maps
22 / 38
// Routing anlegen
$ zf2rapid create-routing Shop
// Striktes Routing anlegen
$ zf2rapid create-routing Shop --strict
// Class Map generieren
$ zf2rapid generate-classmap Shop
// Template Map generieren
$ zf2rapid generate-templatemap Shop
Routing und Maps anlegenRouting und Maps anlegen
[b00][b00]
2323 // 3838
Code anschauenCode anschauen
[b00][b00]
2424 // 3838
Im Browser anschauenIm Browser anschauen
[b08][b08]
2525 // 3838
CRUDCRUD
26 / 38
DatenbankmodellDatenbankmodell
27 / 38
// Datei /config/autoload/development.php
return array(
'db' => array(
'driver' => 'pdo',
'dsn' => 'mysql:dbname=ipc2015.zf2rapid;host=localhost;
charset=utf8',
'user' => 'ipc2015',
'pass' => 'ipc2015',
),
);
// Datenbankverbindung prüfen
$ zf2rapid crud-check-db
// Datenbanktabellen anzeigen
$ zf2rapid crud-show-tables
CRUD Datenbank konfigurierenCRUD Datenbank konfigurieren
28 / 38
$ zf2rapid create-module BlogDomain --configFile=development.config.php
$ zf2rapid crud-create-model BlogDomain article,category,author
$ zf2rapid crud-create-model --help
===========================================================================
Usage:
crud-create-model <module> <tables> [--workingPath=]
Arguments:
<module> The name of the module to create the model classes in;
mandatory
<tables> The names of the database tables to create the model
classes for; mandatory
--workingPath= The path to work in; defaults to current working path
Help:
Create all model classes (entity, hydrator, table gateway, repository) for
a database table
===========================================================================
CRUD Model anlegenCRUD Model anlegen
[b00][b00]
2929 // 3838
Code anschauenCode anschauen
30 / 38
$ zf2rapid create-module AuthorAdmin --configFile=development.config.php
$ zf2rapid create-module CategoryAdmin --configFile=development.config.php
$ zf2rapid create-module ArticleAdmin --configFile=development.config.php
$ zf2rapid crud-create-application AuthorAdmin BlogDomain/AuthorEntity
$ zf2rapid crud-create-application CategoryAdmin BlogDomain/CategoryEntity
$ zf2rapid crud-create-application ArticleAdmin BlogDomain/ArticleEntity
$ zf2rapid crud-create-application --help
===========================================================================
Usage:
crud-create-application <module> <entity> [--workingPath=]
Arguments:
<module> The name of the module to create the application in;
<entity> The entity to create the application for with the format
ModuleName/EntityClassName; mandatory
--workingPath= The path to work in; defaults to current working path
Help:
Create application (controller, view) for a model entity
===========================================================================
CRUD Application anlegenCRUD Application anlegen
[b00][b00]
3131 // 3838
Code anschauenCode anschauen
[b00][b00]
3232 // 3838
Im Browser anschauenIm Browser anschauen
[b09][b09]
3333 // 3838
FinetuningFinetuning
[b10][b10]
3434 // 3838
Wichtige Warnung!Wichtige Warnung!
[b11][b11]
3535 // 3838
Testen, Bugs & FeaturesTesten, Bugs & Features
Fragen vom Publikum?Fragen vom Publikum?
3636 // 3838
[b12][b12]
3737 // 3838
DankeDanke
Für Ihre / Eure AufmerksamkeitFür Ihre / Eure Aufmerksamkeit

Repository: https://github.com/RalfEggert/ipc2015-zf2rapidRepository: https://github.com/RalfEggert/ipc2015-zf2rapid
Slides: http://de.slideshare.net/eggertralf/ipc2015-zf2rapidSlides: http://de.slideshare.net/eggertralf/ipc2015-zf2rapid
BildnachweisBildnachweis
[B00] Fotos von Ralf Eggert
[B01] Frontiers 2011 - Day 2 https://www.flickr.com/photos/frontiersofinteraction/5866676276/ von Frontiersofinteraction - CC-BY https://creativecommons.org/licenses/by/2.0/
[B02] My nuts https://www.flickr.com/photos/lucasincas/6517703315/ von Lucas Incas - CC-BY https://creativecommons.org/licenses/by/2.0/
[B03] Harbourside Building Site 4 https://www.flickr.com/photos/matt_gibson/420273270/ von Matt Gibson - CC-BY https://creativecommons.org/licenses/by/2.0/
[B04] rainbow cubes with holes https://www.flickr.com/photos/generated/6313491064/ von Jared Tarbell - CC-BY https://creativecommons.org/licenses/by/2.0/
[B05] Monaco-14pt https://www.flickr.com/photos/polarity/3138680190/ von Robert Agthe - CC-BY https://creativecommons.org/licenses/by/2.0/
[B06] Scenic Route 207 Texas Plain Trail https://www.flickr.com/photos/mtsrs/2547608404/ von mtsrs - CC-BY https://creativecommons.org/licenses/by/2.0/
[B07] Molecular Bonds https://www.flickr.com/photos/pasukaru76/6978143982/ von Pascal - CC-BY https://creativecommons.org/licenses/by/2.0/
[B08] Fixing the database https://www.flickr.com/photos/dahlstroms/4140461901 von Håkan Dahlström - CC-BY https://creativecommons.org/licenses/by/2.0/
[B09] Swiss Army Knife https://www.flickr.com/photos/askdavetaylor/4261149346/ von Dave Taylor - CC-BY https://creativecommons.org/licenses/by/2.0/
[B10] Warning https://www.flickr.com/photos/thomasletholsen/9369862678/ von Thomas Leth-Olsen- CC-BY-SA https://creativecommons.org/licenses/by-sa/2.0/
[B11] Help wanted sign https://www.flickr.com/photos/andjohan/5644714850/ von Andreas Klinke Johannsen - CC-BY-SA https://creativecommons.org/licenses/by-sa/2.0/
[B12] Etech05: Audience https://www.flickr.com/photos/oreilly/6648470 von James Duncan Davidson - CC-BY https://creativecommons.org/licenses/by/2.0/
[B13] Jobs https://www.flickr.com/photos/jakerust/16844967041/ von www.gotcredit.com - CC-BY https://creativecommons.org/licenses/by/2.0/
ZFrapid Logo von Moritz Liebeknecht.
Alle weiteren Screenshots wurden von Ralf Eggert erstellt.
38 / 38
1 of 38

Recommended

Zend\Expressive - höher, schneller, weiter by
Zend\Expressive - höher, schneller, weiterZend\Expressive - höher, schneller, weiter
Zend\Expressive - höher, schneller, weiterRalf Eggert
2.2K views50 slides
Apigility reloaded by
Apigility reloadedApigility reloaded
Apigility reloadedRalf Eggert
1.9K views44 slides
Kicking off with Zend Expressive and Doctrine ORM (PHPNW2016) by
Kicking off with Zend Expressive and Doctrine ORM (PHPNW2016)Kicking off with Zend Expressive and Doctrine ORM (PHPNW2016)
Kicking off with Zend Expressive and Doctrine ORM (PHPNW2016)James Titcumb
1.3K views78 slides
Zf2 how arrays will save your project by
Zf2   how arrays will save your projectZf2   how arrays will save your project
Zf2 how arrays will save your projectMichelangelo van Dam
1.3K views46 slides
QA for PHP projects by
QA for PHP projectsQA for PHP projects
QA for PHP projectsMichelangelo van Dam
2.6K views105 slides
Zend Framework 2 Components by
Zend Framework 2 ComponentsZend Framework 2 Components
Zend Framework 2 ComponentsShawn Stratton
3.1K views46 slides

More Related Content

What's hot

Diving into HHVM Extensions (PHPNW Conference 2015) by
Diving into HHVM Extensions (PHPNW Conference 2015)Diving into HHVM Extensions (PHPNW Conference 2015)
Diving into HHVM Extensions (PHPNW Conference 2015)James Titcumb
1K views78 slides
Zend/Expressive 3 – The Next Generation by
Zend/Expressive 3 – The Next GenerationZend/Expressive 3 – The Next Generation
Zend/Expressive 3 – The Next GenerationRalf Eggert
364 views70 slides
Zend Framework Study@Tokyo #2 by
Zend Framework Study@Tokyo #2Zend Framework Study@Tokyo #2
Zend Framework Study@Tokyo #2Shinya Ohyanagi
1.3K views68 slides
Getting started with TDD - Confoo 2014 by
Getting started with TDD - Confoo 2014Getting started with TDD - Confoo 2014
Getting started with TDD - Confoo 2014Eric Hogue
1.6K views88 slides
Continuous testing In PHP by
Continuous testing In PHPContinuous testing In PHP
Continuous testing In PHPEric Hogue
760 views108 slides
Zend Framework Study@Tokyo vol1 by
Zend Framework Study@Tokyo vol1Zend Framework Study@Tokyo vol1
Zend Framework Study@Tokyo vol1Shinya Ohyanagi
1K views73 slides

What's hot(20)

Diving into HHVM Extensions (PHPNW Conference 2015) by James Titcumb
Diving into HHVM Extensions (PHPNW Conference 2015)Diving into HHVM Extensions (PHPNW Conference 2015)
Diving into HHVM Extensions (PHPNW Conference 2015)
James Titcumb1K views
Zend/Expressive 3 – The Next Generation by Ralf Eggert
Zend/Expressive 3 – The Next GenerationZend/Expressive 3 – The Next Generation
Zend/Expressive 3 – The Next Generation
Ralf Eggert364 views
Zend Framework Study@Tokyo #2 by Shinya Ohyanagi
Zend Framework Study@Tokyo #2Zend Framework Study@Tokyo #2
Zend Framework Study@Tokyo #2
Shinya Ohyanagi1.3K views
Getting started with TDD - Confoo 2014 by Eric Hogue
Getting started with TDD - Confoo 2014Getting started with TDD - Confoo 2014
Getting started with TDD - Confoo 2014
Eric Hogue1.6K views
Continuous testing In PHP by Eric Hogue
Continuous testing In PHPContinuous testing In PHP
Continuous testing In PHP
Eric Hogue760 views
Codeigniter4の比較と検証 by ME iBotch
Codeigniter4の比較と検証Codeigniter4の比較と検証
Codeigniter4の比較と検証
ME iBotch6.9K views
Publishing a Perl6 Module by ast_j
Publishing a Perl6 ModulePublishing a Perl6 Module
Publishing a Perl6 Module
ast_j1.5K views
What you need to remember when you upload to CPAN by charsbar
What you need to remember when you upload to CPANWhat you need to remember when you upload to CPAN
What you need to remember when you upload to CPAN
charsbar1.4K views
関西PHP勉強会 php5.4つまみぐい by Hisateru Tanaka
関西PHP勉強会 php5.4つまみぐい関西PHP勉強会 php5.4つまみぐい
関西PHP勉強会 php5.4つまみぐい
Hisateru Tanaka2.6K views
Php 7 hhvm and co by Pierre Joye
Php 7 hhvm and coPhp 7 hhvm and co
Php 7 hhvm and co
Pierre Joye4.1K views
Better detection of what modules are used by some Perl 5 code by charsbar
Better detection of what modules are used by some Perl 5 codeBetter detection of what modules are used by some Perl 5 code
Better detection of what modules are used by some Perl 5 code
charsbar3.8K views
PHP Performance SfLive 2010 by De Cock Xavier
PHP Performance SfLive 2010PHP Performance SfLive 2010
PHP Performance SfLive 2010
De Cock Xavier8.3K views
On UnQLite by charsbar
On UnQLiteOn UnQLite
On UnQLite
charsbar6.4K views
I, For One, Welcome Our New Perl6 Overlords by heumann
I, For One, Welcome Our New Perl6 OverlordsI, For One, Welcome Our New Perl6 Overlords
I, For One, Welcome Our New Perl6 Overlords
heumann715 views
soscon2018 - Tracing for fun and profit by hanbeom Park
soscon2018 - Tracing for fun and profitsoscon2018 - Tracing for fun and profit
soscon2018 - Tracing for fun and profit
hanbeom Park56 views
The why and how of moving to PHP 5.5/5.6 by Wim Godden
The why and how of moving to PHP 5.5/5.6The why and how of moving to PHP 5.5/5.6
The why and how of moving to PHP 5.5/5.6
Wim Godden23.1K views
OSDC 2014: Ole Michaelis & Sönke Rümpler: Make it SOLID - Software Architectu... by NETWAYS
OSDC 2014: Ole Michaelis & Sönke Rümpler: Make it SOLID - Software Architectu...OSDC 2014: Ole Michaelis & Sönke Rümpler: Make it SOLID - Software Architectu...
OSDC 2014: Ole Michaelis & Sönke Rümpler: Make it SOLID - Software Architectu...
NETWAYS794 views

Similar to IPC 2015 ZF2rapid

Fundamentals of Extending Magento 2 - php[world] 2015 by
Fundamentals of Extending Magento 2 - php[world] 2015Fundamentals of Extending Magento 2 - php[world] 2015
Fundamentals of Extending Magento 2 - php[world] 2015David Alger
12.6K views55 slides
Zend by
ZendZend
ZendMohamed Ramadan
326 views100 slides
Drizzle to MySQL, Stress Free Migration by
Drizzle to MySQL, Stress Free MigrationDrizzle to MySQL, Stress Free Migration
Drizzle to MySQL, Stress Free MigrationAndrew Hutchings
1.1K views53 slides
Deprecated: Foundations of Zend Framework 2 by
Deprecated: Foundations of Zend Framework 2Deprecated: Foundations of Zend Framework 2
Deprecated: Foundations of Zend Framework 2Adam Culp
3.4K views45 slides
Automating Drupal Development: Makefiles, features and beyond by
Automating Drupal Development: Makefiles, features and beyondAutomating Drupal Development: Makefiles, features and beyond
Automating Drupal Development: Makefiles, features and beyondNuvole
6.9K views113 slides
Gdb basics for my sql db as (openfest 2017) final by
Gdb basics for my sql db as (openfest 2017) finalGdb basics for my sql db as (openfest 2017) final
Gdb basics for my sql db as (openfest 2017) finalValeriy Kravchuk
912 views31 slides

Similar to IPC 2015 ZF2rapid(20)

Fundamentals of Extending Magento 2 - php[world] 2015 by David Alger
Fundamentals of Extending Magento 2 - php[world] 2015Fundamentals of Extending Magento 2 - php[world] 2015
Fundamentals of Extending Magento 2 - php[world] 2015
David Alger12.6K views
Drizzle to MySQL, Stress Free Migration by Andrew Hutchings
Drizzle to MySQL, Stress Free MigrationDrizzle to MySQL, Stress Free Migration
Drizzle to MySQL, Stress Free Migration
Andrew Hutchings1.1K views
Deprecated: Foundations of Zend Framework 2 by Adam Culp
Deprecated: Foundations of Zend Framework 2Deprecated: Foundations of Zend Framework 2
Deprecated: Foundations of Zend Framework 2
Adam Culp3.4K views
Automating Drupal Development: Makefiles, features and beyond by Nuvole
Automating Drupal Development: Makefiles, features and beyondAutomating Drupal Development: Makefiles, features and beyond
Automating Drupal Development: Makefiles, features and beyond
Nuvole6.9K views
Gdb basics for my sql db as (openfest 2017) final by Valeriy Kravchuk
Gdb basics for my sql db as (openfest 2017) finalGdb basics for my sql db as (openfest 2017) final
Gdb basics for my sql db as (openfest 2017) final
Valeriy Kravchuk912 views
Gdb basics for my sql db as (percona live europe 2019) by Valerii Kravchuk
Gdb basics for my sql db as (percona live europe 2019)Gdb basics for my sql db as (percona live europe 2019)
Gdb basics for my sql db as (percona live europe 2019)
Valerii Kravchuk1.1K views
Docker at Digital Ocean by Cloud 66
Docker at Digital OceanDocker at Digital Ocean
Docker at Digital Ocean
Cloud 66386 views
OSMC 2019 | Use Cloud services & features in your redundant Icinga2 Environme... by NETWAYS
OSMC 2019 | Use Cloud services & features in your redundant Icinga2 Environme...OSMC 2019 | Use Cloud services & features in your redundant Icinga2 Environme...
OSMC 2019 | Use Cloud services & features in your redundant Icinga2 Environme...
NETWAYS111 views
Michal Havryluk: How To Speed Up Android Gradle Builds by mdevtalk
Michal Havryluk: How To Speed Up Android Gradle BuildsMichal Havryluk: How To Speed Up Android Gradle Builds
Michal Havryluk: How To Speed Up Android Gradle Builds
mdevtalk437 views
Z-Ray: A customizable development tool belt (Zendcon 2016) by Mathew Beane
Z-Ray: A customizable development tool belt (Zendcon 2016)Z-Ray: A customizable development tool belt (Zendcon 2016)
Z-Ray: A customizable development tool belt (Zendcon 2016)
Mathew Beane596 views
Common schema my sql uc 2012 by Roland Bouman
Common schema   my sql uc 2012Common schema   my sql uc 2012
Common schema my sql uc 2012
Roland Bouman519 views
Common schema my sql uc 2012 by Roland Bouman
Common schema   my sql uc 2012Common schema   my sql uc 2012
Common schema my sql uc 2012
Roland Bouman600 views
Drupal Day 2012 - Automating Drupal Development: Make!les, Features and Beyond by DrupalDay
Drupal Day 2012 - Automating Drupal Development: Make!les, Features and BeyondDrupal Day 2012 - Automating Drupal Development: Make!les, Features and Beyond
Drupal Day 2012 - Automating Drupal Development: Make!les, Features and Beyond
DrupalDay924 views
Introduction to Zend framework by Matteo Magni
Introduction to Zend framework Introduction to Zend framework
Introduction to Zend framework
Matteo Magni1.1K views
Zend Framework Foundations by Chuck Reeves
Zend Framework FoundationsZend Framework Foundations
Zend Framework Foundations
Chuck Reeves668 views
XPDDS18: Xenwatch Multithreading - Dongli Zhang, Oracle by The Linux Foundation
XPDDS18: Xenwatch Multithreading - Dongli Zhang, OracleXPDDS18: Xenwatch Multithreading - Dongli Zhang, Oracle
XPDDS18: Xenwatch Multithreading - Dongli Zhang, Oracle
Ростислав Михайлив "Zend Framework 3 - evolution or revolution" by Fwdays
Ростислав Михайлив "Zend Framework 3 - evolution or revolution"Ростислав Михайлив "Zend Framework 3 - evolution or revolution"
Ростислав Михайлив "Zend Framework 3 - evolution or revolution"
Fwdays830 views
[Pgday.Seoul 2019] Citus를 이용한 분산 데이터베이스 by PgDay.Seoul
[Pgday.Seoul 2019] Citus를 이용한 분산 데이터베이스[Pgday.Seoul 2019] Citus를 이용한 분산 데이터베이스
[Pgday.Seoul 2019] Citus를 이용한 분산 데이터베이스
PgDay.Seoul1.5K views

More from Ralf Eggert

ChatGPT: unser täglich' Bot gib uns heute by
ChatGPT: unser täglich' Bot gib uns heuteChatGPT: unser täglich' Bot gib uns heute
ChatGPT: unser täglich' Bot gib uns heuteRalf Eggert
9 views87 slides
Der ultimative PHP Framework Vergleich 2023 Edition by
Der ultimative PHP Framework Vergleich 2023 EditionDer ultimative PHP Framework Vergleich 2023 Edition
Der ultimative PHP Framework Vergleich 2023 EditionRalf Eggert
3 views79 slides
PHP Module als Rundum-Sorglos-Pakete entwickeln by
PHP Module als Rundum-Sorglos-Pakete entwickelnPHP Module als Rundum-Sorglos-Pakete entwickeln
PHP Module als Rundum-Sorglos-Pakete entwickelnRalf Eggert
70 views70 slides
Alexa, what's next? by
Alexa, what's next?Alexa, what's next?
Alexa, what's next?Ralf Eggert
311 views58 slides
Alexa, wohin geht die Reise by
Alexa, wohin geht die ReiseAlexa, wohin geht die Reise
Alexa, wohin geht die ReiseRalf Eggert
265 views26 slides
8. Hamburg Voice Interface Meetup by
8. Hamburg Voice Interface Meetup8. Hamburg Voice Interface Meetup
8. Hamburg Voice Interface MeetupRalf Eggert
199 views16 slides

More from Ralf Eggert(20)

ChatGPT: unser täglich' Bot gib uns heute by Ralf Eggert
ChatGPT: unser täglich' Bot gib uns heuteChatGPT: unser täglich' Bot gib uns heute
ChatGPT: unser täglich' Bot gib uns heute
Ralf Eggert9 views
Der ultimative PHP Framework Vergleich 2023 Edition by Ralf Eggert
Der ultimative PHP Framework Vergleich 2023 EditionDer ultimative PHP Framework Vergleich 2023 Edition
Der ultimative PHP Framework Vergleich 2023 Edition
Ralf Eggert3 views
PHP Module als Rundum-Sorglos-Pakete entwickeln by Ralf Eggert
PHP Module als Rundum-Sorglos-Pakete entwickelnPHP Module als Rundum-Sorglos-Pakete entwickeln
PHP Module als Rundum-Sorglos-Pakete entwickeln
Ralf Eggert70 views
Alexa, what's next? by Ralf Eggert
Alexa, what's next?Alexa, what's next?
Alexa, what's next?
Ralf Eggert311 views
Alexa, wohin geht die Reise by Ralf Eggert
Alexa, wohin geht die ReiseAlexa, wohin geht die Reise
Alexa, wohin geht die Reise
Ralf Eggert265 views
8. Hamburg Voice Interface Meetup by Ralf Eggert
8. Hamburg Voice Interface Meetup8. Hamburg Voice Interface Meetup
8. Hamburg Voice Interface Meetup
Ralf Eggert199 views
Alexa Skill Maintenance by Ralf Eggert
Alexa Skill MaintenanceAlexa Skill Maintenance
Alexa Skill Maintenance
Ralf Eggert385 views
Vom Zend Framework zu Laminas by Ralf Eggert
Vom Zend Framework zu LaminasVom Zend Framework zu Laminas
Vom Zend Framework zu Laminas
Ralf Eggert441 views
Alexa Skills und PHP? Passt das zusammen? by Ralf Eggert
Alexa Skills und PHP? Passt das zusammen?Alexa Skills und PHP? Passt das zusammen?
Alexa Skills und PHP? Passt das zusammen?
Ralf Eggert426 views
Mit Jovo von 0 auf 100 by Ralf Eggert
Mit Jovo von 0 auf 100Mit Jovo von 0 auf 100
Mit Jovo von 0 auf 100
Ralf Eggert477 views
Vom Zend Framework zu Laminas by Ralf Eggert
Vom Zend Framework zu LaminasVom Zend Framework zu Laminas
Vom Zend Framework zu Laminas
Ralf Eggert490 views
Alexa for Hospitality by Ralf Eggert
Alexa for HospitalityAlexa for Hospitality
Alexa for Hospitality
Ralf Eggert249 views
Alexa, lass uns Geld verdienen – fünf Geschäftsmodelle, die wirklich funktion... by Ralf Eggert
Alexa, lass uns Geld verdienen – fünf Geschäftsmodelle, die wirklich funktion...Alexa, lass uns Geld verdienen – fünf Geschäftsmodelle, die wirklich funktion...
Alexa, lass uns Geld verdienen – fünf Geschäftsmodelle, die wirklich funktion...
Ralf Eggert802 views
Fortgeschrittene Techniken für erfolgreiche Sprachanwendungen by Ralf Eggert
Fortgeschrittene Techniken für erfolgreiche SprachanwendungenFortgeschrittene Techniken für erfolgreiche Sprachanwendungen
Fortgeschrittene Techniken für erfolgreiche Sprachanwendungen
Ralf Eggert336 views
Die sieben Projektphasen für Voice Projekte by Ralf Eggert
Die sieben Projektphasen für Voice ProjekteDie sieben Projektphasen für Voice Projekte
Die sieben Projektphasen für Voice Projekte
Ralf Eggert332 views
Künstliche Intelligenz – Traum und Wirklichkeit by Ralf Eggert
Künstliche Intelligenz – Traum und WirklichkeitKünstliche Intelligenz – Traum und Wirklichkeit
Künstliche Intelligenz – Traum und Wirklichkeit
Ralf Eggert518 views
Multi-Modal Voice Development with Amazon Alexa by Ralf Eggert
Multi-Modal Voice Development with Amazon AlexaMulti-Modal Voice Development with Amazon Alexa
Multi-Modal Voice Development with Amazon Alexa
Ralf Eggert987 views
Mein Haus, mein Auto, mein Backend by Ralf Eggert
Mein Haus, mein Auto, mein BackendMein Haus, mein Auto, mein Backend
Mein Haus, mein Auto, mein Backend
Ralf Eggert171 views
Sieben Tipps für den Voice Commerce mit PHP by Ralf Eggert
Sieben Tipps für den Voice Commerce mit PHPSieben Tipps für den Voice Commerce mit PHP
Sieben Tipps für den Voice Commerce mit PHP
Ralf Eggert218 views

Recently uploaded

"Running students' code in isolation. The hard way", Yurii Holiuk by
"Running students' code in isolation. The hard way", Yurii Holiuk "Running students' code in isolation. The hard way", Yurii Holiuk
"Running students' code in isolation. The hard way", Yurii Holiuk Fwdays
36 views34 slides
Webinar : Desperately Seeking Transformation - Part 2: Insights from leading... by
Webinar : Desperately Seeking Transformation - Part 2:  Insights from leading...Webinar : Desperately Seeking Transformation - Part 2:  Insights from leading...
Webinar : Desperately Seeking Transformation - Part 2: Insights from leading...The Digital Insurer
91 views52 slides
This talk was not generated with ChatGPT: how AI is changing science by
This talk was not generated with ChatGPT: how AI is changing scienceThis talk was not generated with ChatGPT: how AI is changing science
This talk was not generated with ChatGPT: how AI is changing scienceElena Simperl
32 views13 slides
The Power of Heat Decarbonisation Plans in the Built Environment by
The Power of Heat Decarbonisation Plans in the Built EnvironmentThe Power of Heat Decarbonisation Plans in the Built Environment
The Power of Heat Decarbonisation Plans in the Built EnvironmentIES VE
84 views20 slides
Evaluation of Quality of Experience of ABR Schemes in Gaming Stream by
Evaluation of Quality of Experience of ABR Schemes in Gaming StreamEvaluation of Quality of Experience of ABR Schemes in Gaming Stream
Evaluation of Quality of Experience of ABR Schemes in Gaming StreamAlpen-Adria-Universität
38 views34 slides
Netmera Presentation.pdf by
Netmera Presentation.pdfNetmera Presentation.pdf
Netmera Presentation.pdfMustafa Kuğu
22 views50 slides

Recently uploaded(20)

"Running students' code in isolation. The hard way", Yurii Holiuk by Fwdays
"Running students' code in isolation. The hard way", Yurii Holiuk "Running students' code in isolation. The hard way", Yurii Holiuk
"Running students' code in isolation. The hard way", Yurii Holiuk
Fwdays36 views
Webinar : Desperately Seeking Transformation - Part 2: Insights from leading... by The Digital Insurer
Webinar : Desperately Seeking Transformation - Part 2:  Insights from leading...Webinar : Desperately Seeking Transformation - Part 2:  Insights from leading...
Webinar : Desperately Seeking Transformation - Part 2: Insights from leading...
This talk was not generated with ChatGPT: how AI is changing science by Elena Simperl
This talk was not generated with ChatGPT: how AI is changing scienceThis talk was not generated with ChatGPT: how AI is changing science
This talk was not generated with ChatGPT: how AI is changing science
Elena Simperl32 views
The Power of Heat Decarbonisation Plans in the Built Environment by IES VE
The Power of Heat Decarbonisation Plans in the Built EnvironmentThe Power of Heat Decarbonisation Plans in the Built Environment
The Power of Heat Decarbonisation Plans in the Built Environment
IES VE84 views
NTGapps NTG LowCode Platform by Mustafa Kuğu
NTGapps NTG LowCode Platform NTGapps NTG LowCode Platform
NTGapps NTG LowCode Platform
Mustafa Kuğu437 views
GDSC GLAU Info Session.pptx by gauriverrma4
GDSC GLAU Info Session.pptxGDSC GLAU Info Session.pptx
GDSC GLAU Info Session.pptx
gauriverrma415 views
"Package management in monorepos", Zoltan Kochan by Fwdays
"Package management in monorepos", Zoltan Kochan"Package management in monorepos", Zoltan Kochan
"Package management in monorepos", Zoltan Kochan
Fwdays34 views
Digital Personal Data Protection (DPDP) Practical Approach For CISOs by Priyanka Aash
Digital Personal Data Protection (DPDP) Practical Approach For CISOsDigital Personal Data Protection (DPDP) Practical Approach For CISOs
Digital Personal Data Protection (DPDP) Practical Approach For CISOs
Priyanka Aash162 views
The Power of Generative AI in Accelerating No Code Adoption.pdf by Saeed Al Dhaheri
The Power of Generative AI in Accelerating No Code Adoption.pdfThe Power of Generative AI in Accelerating No Code Adoption.pdf
The Power of Generative AI in Accelerating No Code Adoption.pdf
Saeed Al Dhaheri39 views
Redefining the book supply chain: A glimpse into the future - Tech Forum 2023 by BookNet Canada
Redefining the book supply chain: A glimpse into the future - Tech Forum 2023Redefining the book supply chain: A glimpse into the future - Tech Forum 2023
Redefining the book supply chain: A glimpse into the future - Tech Forum 2023
BookNet Canada44 views
Initiating and Advancing Your Strategic GIS Governance Strategy by Safe Software
Initiating and Advancing Your Strategic GIS Governance StrategyInitiating and Advancing Your Strategic GIS Governance Strategy
Initiating and Advancing Your Strategic GIS Governance Strategy
Safe Software184 views
"Node.js Development in 2024: trends and tools", Nikita Galkin by Fwdays
"Node.js Development in 2024: trends and tools", Nikita Galkin "Node.js Development in 2024: trends and tools", Nikita Galkin
"Node.js Development in 2024: trends and tools", Nikita Galkin
Fwdays33 views
Optimizing Communication to Optimize Human Behavior - LCBM by Yaman Kumar
Optimizing Communication to Optimize Human Behavior - LCBMOptimizing Communication to Optimize Human Behavior - LCBM
Optimizing Communication to Optimize Human Behavior - LCBM
Yaman Kumar38 views

IPC 2015 ZF2rapid

  • 1. 1 / 38 ZF2rapidZF2rapid Zend Framework 2 Anwendungen im HandumdrehenZend Framework 2 Anwendungen im Handumdrehen  Repository: https://github.com/RalfEggert/ipc2015-zf2rapidRepository: https://github.com/RalfEggert/ipc2015-zf2rapid
  • 3. Fragen an das PublikumFragen an das Publikum 33 // 3838 [b01][b01]
  • 4. [B02][B02] 44 // 3838 ZF2rapid in a nutshellZF2rapid in a nutshell
  • 6. ProjekteProjekte ModuleModule Code GenerierungCode Generierung Routing & MapsRouting & Maps KonfigurationKonfiguration CRUDCRUD 6 / 38 [B05][B05][B04][B04][B03][B03] [B08][B08][B07][B07][B06][B06] ZF2rapid FeaturesZF2rapid Features
  • 7. 7 / 38 // Mit Git clonen und mit Composer installieren $ cd /home/devhost/ $ git clone https://github.com/ZFrapid/zf2rapid.git zf2rapid $ cd zf2rapid $ composer install // Lokale Installation testen $ ./bin/zf2rapid.php // Dynamischen Link erstellen $ sudo ln -s /home/devhost/zf2rapid/bin/zf2rapid.php /usr/local/bin/zf2rapid // Details zur Installation (auch unter Windows) unter // https://github.com/ZFrapid/zf2rapid/blob/master/docs/installation.md ZF2rapid InstallationZF2rapid Installation
  • 9. 9 / 38 $ zf2rapid create-project --help =========================================================================== Usage: create-project [--workingPath=] Arguments: --workingPath= The path to work in; defaults to current working path Help: Create a new ZF2 project within the specified path =========================================================================== $ cd /home/devhost/ $ zf2rapid create-project --workingPath=myproject $ cd myproject/ Projekt anlegenProjekt anlegen
  • 10. 10 / 38 $ zf2rapid tool-config { "configFileFormat": "php", "flagAddDocBlocks": "true", "fileDocBlockText": "ZF2 Application built by ZF2rapid", "fileDocBlockCopyright": "(c) 2015 John Doe", "fileDocBlockLicense": "http://opensource.org/licenses/MIT MITLicense", "namespaceController": "Controller", "namespaceControllerPlugin": "ControllerPlugin", "namespaceViewHelper": "ViewHelper", "namespaceFilter": "ModelFilter", "namespaceValidator": "ModelValidator", "namespaceInputFilter": "ModelInputFilter", "namespaceForm": "Form", "namespaceHydrator": "ModelHydrator", "namespaceEntity": "ModelEntity", "namespaceTableGateway": "ModelTableGateway", "namespaceRepository": "ModelRepository" } Projekt konfigurierenProjekt konfigurieren
  • 12. 12 / 38 $ zf2rapid create-module --help =========================================================================== Usage: create-module <module> [--workingPath=] [--configFile=] [--without-project] [--no-activation] Arguments: <module> The name of the module to create; mandatory --workingPath= The path to work in; defaults to current working path --configFile= Specify the configuration file to activate or deactivate a module in; defaults to not bet set --without-project Ignore if working path does not contain a ZF2 project; defaults to current working path --no-activation Prevent the activation of the new module (disabled by default) Help: Create a new module within the specified path =========================================================================== Modul anlegenModul anlegen
  • 13. 13 / 38 // Modul anlegen $ zf2rapid create-module Shop // Modul löschen $ zf2rapid delete-module Shop // Modul aktivieren $ zf2rapid activate-module Shop // Modul deaktivieren $ zf2rapid deactivate-module Shop // Konfigurationsdatei mit angeben $ zf2rapid create-module Shop --configFile=development.config.php // Modul unabhängig vom Zend Framework 2 Projekt anlegen $ zf2rapid create-module Shop --without-project --workingPath=/some/where Mit Modulen arbeitenMit Modulen arbeiten
  • 14. [b00][b00] 1414 // 3838 Code anschauenCode anschauen
  • 15. [b05][b05] 1515 // 3838 Code generierungCode generierung
  • 16. 16 / 38 $ zf2rapid create-controller --help =========================================================================== Usage: create-controller <module> <controller> [--workingPath=] [--without-project] [--no-factory] Arguments: <module> The name of the module to create the controller in; mandatory <controller> The name of the controller to create; mandatory --workingPath= The path to work in; defaults to current working path --without-project Ignore if working path does not contain a ZF2 project; defaults to current working path --no-factory Prevent the creation of a factory for the new controller Help: Create a new controller for module within the specified path =========================================================================== Controller anlegenController anlegen
  • 17. 17 / 38 $ zf2rapid create-action --help =========================================================================== Usage: create-action <module> <controller> <action> [--workingPath=] [--without-project] Arguments: <module> The name of the module to create the controller action in; mandatory <controller> The name of the controller to create an action for; mandatory <action> The name of the new action to create; mandatory --workingPath= The path to work in; defaults to current working path --without-project Ignore if working path does not contain a ZF2 project; defaults to current working path Help: Create a new controller action for module within the specified path =========================================================================== Action anlegenAction anlegen
  • 18. 18 / 38 $ zf2rapid create-view-helper --help =========================================================================== Usage: create-view-helper <module> <viewHelper> [--workingPath=] [--without-project] [--no-factory] Arguments: <module> The name of the module to create the view helper in; mandatory <viewHelper> The name of the view helper to create; mandatory --workingPath= The path to work in; defaults to current working path --without-project Ignore if working path does not contain a ZF2 project; defaults to current working path --no-factory Prevent the creation of a factory for the new view helper Help: Create a new view helper for module within the specified path =========================================================================== View Helper anlegenView Helper anlegen
  • 19. 19 / 38 // Validator anlegen $ zf2rapid create-validator Shop Basket // Hydrator anlegen, der ClassMethods Hydrator erweitert $ zf2rapid create-hydrator Shop Basket --baseHydrator=ClassMethods // Formular anlegen $ zf2rapid create-form Shop Basket // Alle Module anzeigen $ zf2rapid show-modules // Alle Controller anzeigen $ zf2rapid show-controllers // Alle Aktionen anzeigen $ zf2rapid show-actions Weitere MöglichkeitenWeitere Möglichkeiten
  • 20. [b00][b00] 2020 // 3838 Code anschauenCode anschauen
  • 21. [b06][b06] 2121 // 3838 Routing & MapsRouting & Maps
  • 22. 22 / 38 // Routing anlegen $ zf2rapid create-routing Shop // Striktes Routing anlegen $ zf2rapid create-routing Shop --strict // Class Map generieren $ zf2rapid generate-classmap Shop // Template Map generieren $ zf2rapid generate-templatemap Shop Routing und Maps anlegenRouting und Maps anlegen
  • 23. [b00][b00] 2323 // 3838 Code anschauenCode anschauen
  • 24. [b00][b00] 2424 // 3838 Im Browser anschauenIm Browser anschauen
  • 27. 27 / 38 // Datei /config/autoload/development.php return array( 'db' => array( 'driver' => 'pdo', 'dsn' => 'mysql:dbname=ipc2015.zf2rapid;host=localhost; charset=utf8', 'user' => 'ipc2015', 'pass' => 'ipc2015', ), ); // Datenbankverbindung prüfen $ zf2rapid crud-check-db // Datenbanktabellen anzeigen $ zf2rapid crud-show-tables CRUD Datenbank konfigurierenCRUD Datenbank konfigurieren
  • 28. 28 / 38 $ zf2rapid create-module BlogDomain --configFile=development.config.php $ zf2rapid crud-create-model BlogDomain article,category,author $ zf2rapid crud-create-model --help =========================================================================== Usage: crud-create-model <module> <tables> [--workingPath=] Arguments: <module> The name of the module to create the model classes in; mandatory <tables> The names of the database tables to create the model classes for; mandatory --workingPath= The path to work in; defaults to current working path Help: Create all model classes (entity, hydrator, table gateway, repository) for a database table =========================================================================== CRUD Model anlegenCRUD Model anlegen
  • 29. [b00][b00] 2929 // 3838 Code anschauenCode anschauen
  • 30. 30 / 38 $ zf2rapid create-module AuthorAdmin --configFile=development.config.php $ zf2rapid create-module CategoryAdmin --configFile=development.config.php $ zf2rapid create-module ArticleAdmin --configFile=development.config.php $ zf2rapid crud-create-application AuthorAdmin BlogDomain/AuthorEntity $ zf2rapid crud-create-application CategoryAdmin BlogDomain/CategoryEntity $ zf2rapid crud-create-application ArticleAdmin BlogDomain/ArticleEntity $ zf2rapid crud-create-application --help =========================================================================== Usage: crud-create-application <module> <entity> [--workingPath=] Arguments: <module> The name of the module to create the application in; <entity> The entity to create the application for with the format ModuleName/EntityClassName; mandatory --workingPath= The path to work in; defaults to current working path Help: Create application (controller, view) for a model entity =========================================================================== CRUD Application anlegenCRUD Application anlegen
  • 31. [b00][b00] 3131 // 3838 Code anschauenCode anschauen
  • 32. [b00][b00] 3232 // 3838 Im Browser anschauenIm Browser anschauen
  • 34. [b10][b10] 3434 // 3838 Wichtige Warnung!Wichtige Warnung!
  • 35. [b11][b11] 3535 // 3838 Testen, Bugs & FeaturesTesten, Bugs & Features
  • 36. Fragen vom Publikum?Fragen vom Publikum? 3636 // 3838 [b12][b12]
  • 37. 3737 // 3838 DankeDanke Für Ihre / Eure AufmerksamkeitFür Ihre / Eure Aufmerksamkeit  Repository: https://github.com/RalfEggert/ipc2015-zf2rapidRepository: https://github.com/RalfEggert/ipc2015-zf2rapid Slides: http://de.slideshare.net/eggertralf/ipc2015-zf2rapidSlides: http://de.slideshare.net/eggertralf/ipc2015-zf2rapid
  • 38. BildnachweisBildnachweis [B00] Fotos von Ralf Eggert [B01] Frontiers 2011 - Day 2 https://www.flickr.com/photos/frontiersofinteraction/5866676276/ von Frontiersofinteraction - CC-BY https://creativecommons.org/licenses/by/2.0/ [B02] My nuts https://www.flickr.com/photos/lucasincas/6517703315/ von Lucas Incas - CC-BY https://creativecommons.org/licenses/by/2.0/ [B03] Harbourside Building Site 4 https://www.flickr.com/photos/matt_gibson/420273270/ von Matt Gibson - CC-BY https://creativecommons.org/licenses/by/2.0/ [B04] rainbow cubes with holes https://www.flickr.com/photos/generated/6313491064/ von Jared Tarbell - CC-BY https://creativecommons.org/licenses/by/2.0/ [B05] Monaco-14pt https://www.flickr.com/photos/polarity/3138680190/ von Robert Agthe - CC-BY https://creativecommons.org/licenses/by/2.0/ [B06] Scenic Route 207 Texas Plain Trail https://www.flickr.com/photos/mtsrs/2547608404/ von mtsrs - CC-BY https://creativecommons.org/licenses/by/2.0/ [B07] Molecular Bonds https://www.flickr.com/photos/pasukaru76/6978143982/ von Pascal - CC-BY https://creativecommons.org/licenses/by/2.0/ [B08] Fixing the database https://www.flickr.com/photos/dahlstroms/4140461901 von Håkan Dahlström - CC-BY https://creativecommons.org/licenses/by/2.0/ [B09] Swiss Army Knife https://www.flickr.com/photos/askdavetaylor/4261149346/ von Dave Taylor - CC-BY https://creativecommons.org/licenses/by/2.0/ [B10] Warning https://www.flickr.com/photos/thomasletholsen/9369862678/ von Thomas Leth-Olsen- CC-BY-SA https://creativecommons.org/licenses/by-sa/2.0/ [B11] Help wanted sign https://www.flickr.com/photos/andjohan/5644714850/ von Andreas Klinke Johannsen - CC-BY-SA https://creativecommons.org/licenses/by-sa/2.0/ [B12] Etech05: Audience https://www.flickr.com/photos/oreilly/6648470 von James Duncan Davidson - CC-BY https://creativecommons.org/licenses/by/2.0/ [B13] Jobs https://www.flickr.com/photos/jakerust/16844967041/ von www.gotcredit.com - CC-BY https://creativecommons.org/licenses/by/2.0/ ZFrapid Logo von Moritz Liebeknecht. Alle weiteren Screenshots wurden von Ralf Eggert erstellt. 38 / 38