1. Preface
1.1. Greeting
1.1.1. Welcome!
1.1.2. Добре дошли!
1.1.3. Καλώς ήρθατε!
1.1.4. Hoşgeldiniz!
1.2. Who am I?
1.2.1. Stoyan Cheresharov :)
1.2.1.1. 15+ years in Web Applications Development
1.2.1.2. E-mail: [email protected]
1.2.1.3. Twitter: @wingman0070
1.2.1.4. Site: http://www.coolcsn.com/
1.3. Thoughts
1.3.1. We are on this planet to give love and be happy!
1.3.2. We are drops from the same ocean put in different vessels!
1.3.3. The world is inside of us. We are the creators of our life.
1.3.4. "Nothing makes sense, but it is very important to keep doing it!" Mahatma Gandhi
1.4. Live video streaming
1.4.1. On YouTube
1.4.1.1. 9:15 - 12:30 BG time (7:15 - 10:30 GMT) Every Friday Starting January 11, 2013 on Bulgarian 9:15-10:37:30 11:07:30 - 12:30
1.4.1.2. Links to be added later
1.4.1.3. My Channel
1.4.2. Using Google+
1.4.2.1. Hangout
1.4.2.1.1. 9 people online
1.5. Adventure
1.5.1. Web Development is a Beautiful Journey in a Magical Forest!
1.5.1.1. It changes as we go!
1.5.1.2. It becomes more friendly
1.6. Mind Maps
1.6.1. Link to this map
1.6.2. Tony Buzan
1.6.2.1. Answers How to learn and remember.
1.6.2.2. Mind Maps
1.6.2.3. Supermind
1.6.2.4. How to read fast and remember everything I want?
1.6.2.5. ...more
1.6.3. Web Based, Cloud
1.6.3.1. www.mind42.com
1.6.3.1.1. free
1.6.3.1.2. No presentations
1.6.3.1.3. No google drive integration
1.6.3.1.4. Adds
1.6.3.2. www.mindmeister.com
1.6.3.2.1. free for 3 maps max
1.6.3.2.2. Works with Google Drive
1.6.3.2.3. Your own pictures upload
1.6.3.2.4. Presentations
1.6.4. Popular Free Softwares
1.6.4.1. FreeMind
1.6.4.2. XMind
1.6.5. Tantek Çelik
1.6.5.1. IETF
1.6.6. Use it everywhere
1.6.6.1. Taking notes
1.6.6.2. Planing
1.6.6.3. Presenting
1.6.6.4. Brainstorming
1.6.6.5. ...more
1.6.7. Own cloud
1.7. Inovations
1.7.1. Web Based, Cloud Technologies
1.7.1.1. Mind Maps
1.7.1.2. Presentations
1.7.1.3. Live Streaming
1.7.1.4. Recording
1.7.1.5. Google+
1.7.1.6. Hangout
1.7.1.7. Cloud Based SDLC
1.7.2. University is to try the cutting edge tehnologies etc.
1.7.3. 21 century education
1.7.4. Everything in this series is new.
1.7.5. We will discover and learn things together.
1.8. Acknowledgments
1.8.1. доц. д-р Гъров
1.8.1.1. Gave me the opportunity
1.8.2. Тодор Величков
1.8.2.1. Inspired me
1.9. Copyrights
1.10. Organization
1.10.1. Introduction
1.10.2. Content
1.10.3. Summary
1.10.4. Q&A
1.11. Hangout on Air
2. 1. Zend Framework. Easy, Simple, Fast!
2.1. Introduction
2.1.1. LAMP
2.1.1.1. Linux
2.1.1.2. Apache web server
2.1.1.3. MySQL
2.1.1.4. PHP
2.1.2. Approaches
2.1.2.1. Computer
2.1.2.1.1. Installed
2.1.2.1.2. Portable
2.1.2.2. Cloud
2.1.2.2.1. Work from anywhere
2.1.2.2.2. Use any device
2.2. Let's get our hands dirty
2.2.1. Install XAMPP
2.2.1.1. Method A: Installation with the Installer
2.2.1.2. Method B: "Installation" without the Installer
2.2.1.2.1. 1. Download the zip file
2.2.1.2.2. 2. Unzip to the portable or local device (e.g. x:\xampp)
2.2.1.2.3. 3. Check if there is a service running on port 80
2.2.1.2.4. 4. Skype is usualy causing problems
2.2.1.2.5. 5. Go to the folder and run "apache_start.bat"
2.2.1.2.6. 6. Open the browser and type in the URL filed "localhost"
2.2.2. CGI
2.2.2.1. Pearl
2.2.2.2. PHP
2.2.2.3. BAT files
2.2.2.4. C
2.2.2.5. C++
2.2.2.6. Java + BAT files
2.2.2.6.1. bat
2.2.2.7. Fortran
2.2.2.8. ...more
2.2.3. ZF1
2.2.3.1. http://localhost
2.2.3.1.1. phpinfo
2.2.3.2. Download ZF1
2.2.3.3. Extract and copy Zend to H:\xampp\php\pear folder
2.2.3.4. Copy zf.bat in /xamp/php
2.2.3.5. Prepare the environment variables
2.2.3.6. create a project
2.2.3.7. create a virtual server
2.2.3.7.1. H:\xampp\apache\conf\extra\httpd-vhosts.conf
2.2.4. ZF2
2.2.4.1. Download ZF2
2.2.4.2. Extract and copy Zend to H:\xampp\php\pear\ZF2
2.2.4.3. Add to httpd.conf or H:\xampp\apache\conf\extra\httpd-vhosts.conf
2.2.4.3.1. alternative is to add it to.htaccess
2.2.4.4. ZendSkeletonApplication
2.2.4.4.1. Click on download as Zip
2.2.4.4.2. Unzip in the projects folder
2.2.4.5. Create a virtual host
2.2.4.5.1. H:\xampp\apache\conf\extra\httpd-vhosts.conf
2.2.4.6. Optional Read and follow Tutorial App
2.2.5. ZF2 and modules with composer
2.2.5.1. Install composer
2.2.5.1.1. SET PATH
2.2.5.1.2. Make sure SSL is enabled in php.ini
2.2.5.1.3. cd /xampp/php
2.2.5.1.4. Install composer
2.2.5.1.5. Create bath file
2.2.5.1.6. Make sure composer works
2.2.5.2. Install ZF2 skeleton App
2.2.5.2.1. Install
2.2.5.2.2. Alternative
2.2.5.3. Modules Installation
2.2.5.3.1. DoctrineModule
2.2.5.3.2. Doctrine ORM or ODM
2.2.5.3.3. Zfcuser
2.2.6. ZF2 with zftool
2.2.6.1. install zftool with composer
2.2.6.2. Manual zip from github
2.2.6.3. zftool.phar
2.2.7. phpcloud
2.2.7.1. dispaly_errors
2.2.7.1.1. index.php
2.2.7.1.2. module.config.php
2.3. Development Stacks
2.3.1. XAMPP
2.3.1.1. No xDebug installed in the latest versions
2.3.1.2. pros
2.3.1.2.1. Doesn't start with the sstartup
2.3.1.3. cons
2.3.1.3.1. no Xdebug
2.3.2. WAMP
2.3.2.1. Download
2.3.2.2. Microsoft Visual C++ 2010 SP1 Redistributable Package (x86)
2.3.2.3. WAMP server 2.4 not working on Virtual machine Win XP SP3 512 MB RAM
2.3.2.3.1. solution is to increase the RAM
2.3.2.4. config is in
2.3.2.4.1. C:\wamp\bin\apache\Apache2.4.4\conf
2.3.3. easyphp
2.3.4. Zend Server
2.3.4.1. Download
2.3.4.1.1. Zend Server (PHP 5.4)
2.3.4.1.2. Zend Server (PHP 5.4)
2.3.4.2. Zend Server Free Edition
2.3.4.3. Zend Server CE
2.3.4.4. Without License or Expired License is CE
2.3.5. If you are using PHP 5.4 or above - CLI server (cli-server)
2.3.5.1. php -S 0.0.0.0:8080 -t public/ public/index.php
2.3.6. Display Errors
2.3.6.1. Add to public/index.php
2.4. IDEs
2.4.1. Notepad++
2.4.1.1. Portable
2.4.1.2. Plugins
2.4.1.2.1. php script engine
2.4.1.2.2. Autocompletion for PHP
2.4.1.2.3. DBGP plugin
2.4.2. Eclipse PDT
2.4.2.1. Zend All-in-ones is Portable. Just unzip and use
2.4.2.2. PHP Development Tools
2.4.2.3. All-in-ones download
2.4.2.4. Zend All-in-ones PDT 3.2.0 w/Eclipse Indigo
2.4.2.5. Debuggers
2.4.2.5.1. Xdebug
2.4.2.5.2. Zend Debugger
2.4.2.6. Eclipse Downloads
2.4.2.7. pros
2.4.2.7.1. ZF2 project
2.4.2.7.2. integrates with Zend Server
2.4.2.7.3. Creates the sceleton app in the IDE
2.4.2.8. cons
2.4.2.8.1. for Git SVN we need to install plugins
2.4.2.9. EGit (on top of JGit) for Eclipse
2.4.2.9.1. WiKi
2.4.2.9.2. HowTo install it
2.4.2.9.3. Install
2.4.2.9.4. HoTo
2.4.2.9.5. But Not recommended and still need TortoiseGit for SSH
2.4.3. Dreamwaver
2.4.4. Zend Studio
2.4.5. NetBeans
2.4.5.1. PHP and HTML5 Learning Trail
2.4.5.2. NetBeans PHP
2.4.5.3. features
2.4.5.4. Download
2.4.5.5. You need JDK 6 or higher
2.4.5.6. Zend Tutorial App in NetBeans
2.4.5.7. pros
2.4.5.7.1. Has Git and SVN
2.4.5.8. cons
2.4.5.8.1. ZF2 is not supported yet (but could be done trough ZF.bat)
2.4.5.9. SSH git
2.4.5.10. Generating an SSH Key
2.4.5.10.1. Generating And Using RSA key on Windows
2.4.5.11. RentAFlat ZF1 tutorial app
2.4.5.11.1. There is a Readme.html in the root of the project
2.4.6. Microsoft Notepad
2.4.7. Apple TextMate
2.4.8. Linux vi
2.4.9. Sublimetext
2.4.10. Aptana Studio
2.4.11. Linux vim
2.4.12. phpDesigner
2.4.13. JetBrains PHPStorm
2.4.13.1. phpStorm
2.4.13.2. It's bit pricey though, unfortunately
2.4.14. ActiveState Komod
2.4.15. PHPEdit
2.4.16. RapidPHP
2.4.17. RadPHP (formerly Delphi for PHP)
2.4.18. OpenKomodo
2.4.19. Comparison
2.4.19.1. Seven great PHP IDEs compared
2.4.19.2. List in WiKi
2.5. Debuggers
2.5.1. Zend Debugger
2.5.1.1. proprietary protocol
2.5.2. XDebug
2.5.2.1. DBGP protocol
2.5.2.2. Remote Debugging
2.5.2.3. Profiling
2.5.2.3.1. Outputs cachegrind compatible file
2.5.2.3.2. Clients
2.5.2.4. Clients
2.5.2.5. Xdebug extensions for web browsers
2.5.2.6. Start a session
2.6. Repositories (SCM, VCS)
2.6.1. Distributed
2.6.1.1. Git
2.6.1.1.1. Linus Torvalds
2.6.1.1.2. Implementations
2.6.1.1.3. Version Control Hosting Services
2.6.1.1.4. RSA key pairs for git (Installing SSH keys on Windows)
2.6.1.1.5. Configuration (Setting up Git profile)
2.6.1.2. Mercurial
2.6.1.3. Bazaar
2.6.2. Central server
2.6.2.1. SVN (Subversion)
2.6.2.2. CVS
2.7. Cloud
2.7.1. Virtualization + web services
2.7.1.1. hypervisor
2.7.2. Categories by what they offer
2.7.2.1. IaaS
2.7.2.1.1. AWS
2.7.2.2. PaaS
2.7.2.2.1. phpcloud.com
2.7.2.2.2. CloudBees
2.7.2.2.3. CloudFoundry
2.7.2.2.4. Appfog
2.7.2.2.5. Heroku
2.7.2.2.6. OpenShift
2.7.2.2.7. Google App Engine
2.7.2.2.8. Elastic Beans Talk
2.7.2.2.9. Microsoft Azure
2.7.2.3. SaaS
2.7.2.3.1. Zoho
2.7.3. Categories by location
2.7.3.1. Private
2.7.3.2. Public
2.7.3.3. Hybrid
2.8. Cloud Approaches
2.8.1. IDE
2.8.1.1. Native apps
2.8.1.2. Web based (Cloud, HTML5)
2.8.1.2.1. Requrments
2.8.1.2.2. Will detach us from the device
2.8.2. VMware
2.8.2.1. Zend Image
2.8.2.1.1. We control it
2.8.3. VNC
2.8.3.1. VPN
2.8.3.1.1. I have to install native apps
2.8.4. Web Desktop, Web (Browser) OS
2.8.4.1. Lucid (Dojo)
2.8.4.2. ExtTop
2.8.5. HTML5
2.8.5.1. CSS3
2.8.5.2. HTML5
2.8.5.3. JS (ES5)
2.8.5.3.1. Alternatives???
2.9. Cloud Development Stacks
2.9.1. phpcloud.com
2.9.1.1. Managing your SSH keys
2.9.1.1.1. PEM RSA keypair
2.9.1.1.2. PPK RSA keypair
2.9.1.2. Connecting via Git
2.9.1.3. Connecting via SFTP
2.9.1.3.1. WinSCP
2.9.1.4. Setting up the Debugger
2.9.1.4.1. starting the debugger
2.9.1.5. Connecting to the Database
2.9.1.6. tools
2.9.1.6.1. OpenSSH
2.9.1.6.2. WinSCP
2.9.1.6.3. PuTTy
2.9.1.6.4. Git
2.9.1.6.5. MySQL
2.9.1.6.6. IDEs
2.9.1.6.7. Browser Plugins
2.9.1.6.8. XDebug
2.9.2. phpfog.com appfog.com
2.10. Cloud IDEs
2.10.1. Cloud 9
2.10.1.1. What it is according to Wikipedia?
2.10.1.2. Public code repositories
2.10.1.2.1. GitHub
2.10.1.2.2. BitBucket
2.10.1.3. Works with
2.10.1.3.1. Mercurial repositories
2.10.1.3.2. Git repositories
2.10.1.3.3. FTP servers
2.10.1.4. Support for deployment (PaaS)
2.10.1.4.1. Heroku
2.10.1.4.2. Joyent
2.10.1.4.3. Windows Azure
2.10.1.5. Features
2.10.1.6. OpenId
2.10.1.6.1. GitHub
2.10.1.6.2. BitBucket
2.10.1.7. Chrome app
2.10.1.7.1. Cloud 9
2.10.1.8. NOT FREE
2.10.1.9. Only 1 RSA key pair
2.10.1.10. Can not export the private key
2.10.1.10.1. you can not use PuTTy or WinSCP at the same time with Cloud 9
2.10.1.11. Can not import RSA key pair
2.10.1.12. HAS A TERMINAL WINDOW (console)
2.10.1.12.1. Big plus
2.10.2. Codenvy (former Exo IDE)
2.10.2.1. What it is according to Wikipedia?
2.10.2.1.1. No info on first search page
2.10.2.2. Public code repositories
2.10.2.2.1. GitHub
2.10.2.2.2. Google ???
2.10.2.3. Support for deployment (PaaS)
2.10.2.3.1. Amazon Web Services
2.10.2.3.2. appfog
2.10.2.3.3. CloudBees
2.10.2.3.4. CloudFoundry
2.10.2.3.5. Google App Engine
2.10.2.3.6. Heroku
2.10.2.3.7. OpenShift
2.10.2.4. OpenId
2.10.2.4.1. GitHub
2.10.2.4.2. Google
2.10.2.5. Mobile native Apps
2.10.2.5.1. iPad
2.10.2.5.2. iPhone
2.10.2.5.3. Android
2.10.2.6. Chrome app
2.10.2.6.1. Cloud IDE
2.10.2.7. Doesn't support
2.10.2.7.1. node.js
2.10.3. Installed on your own server
2.10.4. How to OSS
2.10.4.1. github
2.10.4.1.1. Exo IDE
2.10.4.1.2. Cloud9
2.10.4.2. bitbucket
2.11. Cloud free public repositories (hosting code)
2.11.1. http://sourceforge.net/
2.11.2. http://code.google.com/
2.11.3. https://github.com/
2.11.3.1. What is GitHub according to Wikipedia
2.11.3.2. Main Features
2.11.3.2.1. forking
2.11.3.2.2. pull request
2.11.3.2.3. merge
2.11.3.3. U can use it without web interface
2.11.3.4. It has
2.11.3.4.1. Issue Tracker
2.11.3.4.2. WiKi
2.11.4. https://bitbucket.org/
2.11.4.1. Issue Tracker
2.11.4.1.1. Jira
2.12. Summary
2.13. Q&A
2.14. Cloud Step By Step Tutorial
2.14.1. Exo IDE
2.14.1.1. Create New OSS project
2.14.1.1.1. 1. Create an account on GitHub
2.14.1.1.2. 2. (Optional) Create an account on Exo IDE
2.14.1.1.3. 3. Create an account on AppFog
2.14.1.1.4. 4. Login to Exo IDE
2.14.1.1.5. 5. Choose PaaS
2.14.1.1.6. 6. Create a Project
2.14.1.1.7. 7. (Optional) Delete the files and folders in the new project
2.14.1.1.8. 8. (Optional) Create your own files and folders sutable for the project
2.14.1.1.9. 9. Do "git init"
2.14.1.1.10. 10. Create a repository in GitHub
2.14.1.1.11. 11. Add Remote Repository (github)
2.14.1.1.12. 12. Generate RSA key pair in Exo IDE
2.14.1.1.13. 13. Add the generated public key to github
2.14.1.1.14. 14. In Exo IDE do "git add ."; "git commit -m "My first commit""; "git push <reponame> master"
2.14.1.2. Contribute to an OSS project
2.14.1.2.1. 1. Create an account on GitHub
2.14.1.2.2. 2. (Optional) Create an account on Exo IDE
2.14.1.2.3. 3. Create an account on AppFog
2.14.1.2.4. 4. Login to Exo IDE
2.14.1.2.5. 5. Choose PaaS
2.14.1.2.6. 6. Create a Project
2.14.1.2.7. 7. (Optional) Delete the files and folders in the new project
2.14.1.2.8. 8. (Optional) Create your own files and folders sutable for the project
2.14.1.2.9. 9. Do "git init"
2.14.1.2.10. 10. Add Remote Repository (github) To the project in Exo IDE
2.14.1.2.11. 11. Generate RSA key pair in Exo IDE
2.14.1.2.12. 12. Add the generated public key to github
2.14.1.2.13. 13. Fork the existing project
2.14.1.2.14. 14. In Exo IDE do "git pull"
2.15. git (DSCM, VCS)
2.15.1. git init
2.15.2. git clone ssh://[email protected]/gitprojects/fmi.git
2.15.3. git remote add zend ssh://[email protected]/gitprojects/fmi.git
2.15.4. git remote
2.15.5. git remote rm zend
2.15.6. git branch
2.15.6.1. git branch iss53
2.15.6.2. git checkout iss53
2.15.6.3. git commit -a -m 'added a new footer [issue 53]'
2.15.6.4. git branch -d hotfix
2.15.6.5. $ git branch -r
2.15.6.5.1. Remote tracking branches
2.15.7. git branch mybranch
2.15.8. git rm
2.15.9. git fetch zend
2.15.10. git merge zend/master
2.15.11. .gitignore
2.15.11.1. git rm --cached filename
2.15.12. git push origin master
2.15.13. git pull origin master
2.15.14. git checkout zend/mybranch
2.15.15. git add index.php (. to add all files)
2.15.16. git add <folder>/*
2.15.17. git commit -m "My first commit"
2.15.18. git --version
2.15.19. Zend help
2.15.19.1. git --version
2.15.19.2. git clone <git repo URL>
2.15.19.3. $ GIT_SSL_NO_VERIFY=1 git clone <git repo URL>
2.15.19.4. .git/configfile
2.15.19.4.1. [http] postBuffer = 524288000
2.15.19.5. $ git add index.php$ git commit -m "Adding index.php"
2.15.19.6. $ git push origin master
2.15.19.7. Pushing an Existing Git Project into Zend Developer Cloud Platform
2.15.19.7.1. $ git remote add zendcloud <git repository URL>
2.15.19.7.2. $ git pull zendcloud master
2.15.19.7.3. $ git push zendcloud master
2.15.20. Oficial Git tutorial
2.15.20.1. $ git config --global user.name "Your Name Comes Here"
2.15.20.2. $ git config --global user.email [email protected]
2.16. Cloud Design
2.16.1. wix.com
2.17. tools, frameworks, distribution systems (networks), repositories
2.17.1. PEAR
2.17.2. PECL
2.17.3. Pyrus
2.17.4. Composer
2.17.5. Phar extension
2.17.6. ZF2 Modules
2.17.7. github.com
2.18. Deployment to AppFog
2.18.1. .htaccess
2.18.1.1. root
2.18.1.2. public
2.18.1.3. all other folders
2.18.2. vendor
2.18.2.1. ZF2
2.18.2.1.1. library
2.18.3. .gitignore
2.18.3.1. public
2.18.3.2. vendor
2.18.3.3. first you have to remove the file
2.18.3.3.1. do git remove <filename>
2.18.3.4. After the removal the ignore will take place
2.18.3.5. Note: you can not ignore existing files without first deleting them
2.18.4. Services
2.18.4.1. MySQL
2.18.4.1.1. local.php
2.18.4.1.2. install phpMyAdmin
2.18.4.1.3. config.inc.php phpMyAdmin
2.18.4.1.4. Bind your PhpMyAdmin app to the MySQL service
2.18.4.1.5. PMA_PASSWORD
2.18.4.1.6. use your username for AppFog
2.18.4.1.7. configuration in the app
2.18.5. Custom DNS
2.18.5.1. Free public DNS
2.18.5.2. Free DNS hosting
2.18.5.3. Cloud DNS hosting
2.18.6. public/index.php
2.18.7. autoload file in vendor
2.19. phpunit
2.19.1. Installation
2.19.1.1. PEAR
2.19.1.2. Composer
2.19.1.3. PHP Archive (PHAR)
2.19.1.4. Optional packages
2.19.1.5. Upgrading
2.20. ZF2 cheatsheet
2.21. PSR-0 (Pretty Standard, Really)
2.22. Getting Started with composer packages
2.23. PHPspc
2.24. Behat
2.25. Red Mind
2.26. HTML5, CSS3, JS IDEs
2.27. Continuous integration
2.28. The best Server IDE combinations
2.28.1. Zend EclipsePDT
2.28.1.1. Zend Server (Zend Debugger)
2.28.1.2. EGit extra installed
2.28.1.2.1. SSH? trough PuTTY
2.28.2. NetBeans
2.28.2.1. XAMPP
2.28.2.1.1. Install Xdebug
2.28.2.2. WAMP
2.28.2.2.1. Comes with Xdebug
2.28.2.2.2. Why doesn't work
2.28.2.3. Comes with Git
2.28.2.3.1. SSH?
2.28.2.4. HoTo
2.28.2.4.1. 1 Download and install Git
2.28.2.4.2. 2* (Optional) Generate RSA key pairs
2.28.2.4.3. 3* (Optional) Enter the public key in your bitbucket account
2.28.2.4.4. 4 Download and install WAMP
2.28.2.4.5. 5 add to PATH
2.28.2.4.6. 6 Enable SSL in PHP manualy
2.28.2.4.7. 7 Install composer
2.28.2.4.8. 8 Virtual host
2.28.2.4.9. 9 NetBeans
2.28.3. Minimalistic approach
2.28.3.1. Git (MSYS)
2.28.3.1.1. ssh-keygen -t rsa
2.28.3.2. XAMPP, WAMP or Zend Server
2.28.3.2.1. Add to Path
2.28.3.2.2. vhost with ports
2.28.3.2.3. vhost subdomain
2.28.3.2.4. IMPORTANT NOTES for vhosts
2.28.3.3. composer
2.28.3.3.1. In the PATH
2.28.3.3.2. get composer.phar
2.28.3.3.3. create a bath file
2.28.3.3.4. IMPORTANT NOTES (espacialy for WAMP)
2.28.3.4. Notepad++
2.29. PPI framework Skeleton Application
2.30. ZfcUser, BjyAuthorize and Doctrine working together
2.30.1. How to start a project?
2.31. Naming coding standards
2.32. ZendTool
2.32.1. GitHub
2.32.2. separate from ZF2 project
2.32.3. Documentation
2.32.4. Installation
2.32.4.1. Composer
2.32.4.1.1. Move the folder to vendor
2.32.4.1.2. Sugested changes
2.32.4.2. Manual
2.32.4.3. Without installation, using the PHAR file
2.32.4.3.1. I have created zf.bat in the same folder as zftool.phar
2.32.5. Doesn't create composer.phar in the root of the project
3. 2. MVC. Model View Controller.
3.1. HTML5 kingdom
3.1.1. HTML5 the king and knight
3.1.1.1. HTML - HyperText Markup Language
3.1.1.1.1. History
3.1.1.2. History of HTML5
3.1.1.2.1. 2004
3.1.1.3. tags
3.1.1.3.1. block
3.1.1.3.2. inline
3.1.1.4. What is new in HTML5
3.1.1.4.1. The <canvas> element for 2D drawing
3.1.1.4.2. The <video> and <audio> elements for media playback
3.1.1.4.3. Support for local storage
3.1.1.4.4. New content-specific elements, like <article>, <footer>, <header>, <nav>, <section><aside>
3.1.1.4.5. New form controls, like calendar, date, time, email, url, search
3.1.1.5. Browser Support for HTML5
3.1.1.5.1. HTML5 is not yet an official standard
3.1.1.6. W3C
3.1.1.7. Structure
3.1.1.7.1. some structural HTML5 tags
3.1.1.7.2. drawing
3.1.2. CSS3 the tailor
3.1.2.1. structure and visualisation separation
3.1.2.2. W3C
3.1.2.3. Position
3.1.2.3.1. External
3.1.2.3.2. Internal
3.1.2.4. Selectors
3.1.2.5. Properties (style attributes )
3.1.2.6. Pseudo-classes
3.1.2.7. Pseudo elements
3.1.2.8. CSS for DHTML
3.1.2.8.1. position
3.1.2.8.2. top, left
3.1.2.8.3. bottom, right
3.1.2.8.4. width, height
3.1.2.8.5. z-index
3.1.2.8.6. display
3.1.2.8.7. visibility
3.1.2.8.8. clip
3.1.2.8.9. overflow
3.1.2.8.10. margin, border, padding
3.1.2.8.11. background
3.1.2.8.12. opacity
3.1.2.9. CSS Box model
3.1.2.9.1. Internet Explorer quirks
3.1.2.10. Our CSS
3.1.2.10.1. Main file
3.1.2.10.2. Layout
3.1.2.10.3. Typography
3.1.2.10.4. Navigation
3.1.3. JavaScript (ES5) the wizard
3.1.3.1. Embedding Scripts in HTML
3.1.3.1.1. The <script> Tag
3.1.3.1.2. Scripts in External Files
3.1.4. To conquer all natives
3.1.5. Progressive Enhancement vs Graceful Degradation
3.1.6. The all cool things in the web
3.1.7. ULITA
3.1.7.1. Usability
3.1.7.2. Localisation (l10n)
3.1.7.3. Internationalization (i18n)
3.1.7.4. Translation
3.1.7.5. Accessability
3.2. PHP
3.2.1. "Hello World"
3.2.2. ";" at the end of the statement
3.2.3. Variables start with "$"
3.2.3.1. a-z A-Z 0-9 _
3.2.3.2. don't start with number
3.2.4. Loosely Typed (dynamic)
3.2.4.1. vs
3.2.4.1.1. Stricktly Typed (Static)
3.2.5. Types
3.2.5.1. Numeric
3.2.5.1.1. float
3.2.5.1.2. int
3.2.5.2. Boolean
3.2.5.2.1. true
3.2.5.2.2. false
3.2.5.3. String
3.2.6. functions
3.2.7. PHP Arrays
3.2.8. PHP is from the syntax group of the C languages
3.2.9. Operators
3.2.10. Statements
3.2.10.1. if
3.2.10.2. if else
3.2.10.3. switch
3.2.11. while
3.2.12. do-while
3.2.13. for
3.2.14. $_GET
3.2.15. $_POST
3.2.16. constants
3.2.17. some magic constants
3.2.17.1. __FILE__
3.2.17.2. __DIR__
3.2.17.3. __METHOD__
3.2.17.4. __CLASS__
3.2.18. some predefined constants
3.2.18.1. DIRECTORY_SEPARATOR
3.2.18.2. PATH_SEPARATOR
3.2.19. some predefined superglobal variables
3.2.19.1. $_SERVER
3.2.19.2. $_COOKIE
3.2.19.2.1. setcookie('name', 'value', time() + 3600, "/", "", 0)
3.2.19.3. $_SESSION
3.2.19.3.1. session_start();
3.2.20. 1000+ functions
3.2.20.1. header($header, $replace, $response_code)
3.2.20.1.1. OSI Model
3.2.20.2. ob_start();
3.2.20.3. ob_flush()
3.3. OOP - Object Oriented Programing
3.3.1. Features
3.3.1.1. Inheritance
3.3.1.2. Abstraction
3.3.1.3. Encapsulation
3.3.1.4. Polymorphism
3.3.1.4.1. example
3.3.2. Goal
3.3.2.1. Reuse
3.3.2.2. Arhitecture (Structure)
3.3.2.2.1. The cost of change
3.3.2.2.2. vs hacking
3.3.2.3. 1 more level of abstraction
3.3.2.3.1. system programming usualy NO OOP
3.3.2.3.2. computer doesn care
3.3.2.4. Agile Software Development (Extreme programming)
3.3.2.4.1. Continuous Integration (OOP)
3.3.2.4.2. Refactoring
3.3.2.4.3. Test Driven Development
3.3.2.5. Everyone can write code which the computer can understand, but not everyone can write a code that othe human can understand.
3.3.2.6. Is it the Holy Grail? NO.
3.3.2.6.1. We continue searching and discovering
3.3.3. Topics
3.3.3.1. Class
3.3.3.1.1. Blueprint
3.3.3.1.2. Constructor
3.3.3.1.3. Destructor
3.3.3.1.4. Methods
3.3.3.1.5. Properties
3.3.3.2. Object
3.3.3.2.1. Instance of a class
3.3.3.3. Methods
3.3.3.3.1. Member functions
3.3.3.4. Access Parent Class
3.3.3.4.1. parent::
3.3.3.5. Properties
3.3.3.5.1. Member variables
3.3.3.6. Scope
3.3.3.6.1. private
3.3.3.6.2. protected
3.3.3.6.3. public
3.3.3.7. Constants
3.3.3.8. Static
3.3.3.8.1. Methods
3.3.3.8.2. Properties
3.3.3.8.3. for access ::
3.3.3.8.4. $this not available (use self)
3.3.3.8.5. has scope
3.3.3.9. Abstract Class
3.3.3.9.1. Must have at least 1 abstarct method
3.3.3.9.2. No direct instance
3.3.3.9.3. No abstract properties
3.3.3.10. Interface
3.3.3.10.1. Determen the methods
3.3.3.10.2. Can implement multiple interfaces
3.3.3.10.3. interface - keyword
3.3.3.10.4. implements - keyword
3.3.3.10.5. methods
3.3.3.10.6. makes sure there are well know methods comming from the interface
3.3.3.11. Overriding
3.3.3.12. Overloading
3.3.3.12.1. Magical methods
3.3.3.13. Autoload
3.3.3.13.1. Since PHP 5.2
3.3.3.13.2. spl_autoload_register()
3.3.3.14. Namespaces
3.3.3.14.1. Since PHP 5.3
3.3.3.14.2. basics
3.3.3.14.3. use
3.3.3.15. Anonymous (Lambda) functions and Closures
3.3.3.15.1. SInce 5.3
3.3.3.15.2. callback parameters
3.3.3.15.3. variable assignment
3.3.3.15.4. Closure
3.3.3.16. favor object composition over inheritance
3.3.3.16.1. inheritance
3.3.3.16.2. composition
3.3.3.16.3. Interfaces
3.3.4. Letter to a student (personal)
3.4. Design Patterns
3.4.1. Christopher Alexander
3.4.1.1. architect
3.4.1.2. first created the term
3.4.2. Gang Of Four - Design Patterns, Elements Of Reusable Object Oriented Software
3.4.2.1. Creational Patterns
3.4.2.1.1. Abstract Factory
3.4.2.1.2. Builder
3.4.2.1.3. Factory Method
3.4.2.1.4. Prototype
3.4.2.1.5. Singleton
3.4.2.2. Structural Patterns
3.4.2.2.1. Adapter
3.4.2.2.2. Bridge
3.4.2.2.3. Composite
3.4.2.2.4. Decorator
3.4.2.2.5. Façade
3.4.2.2.6. Flyweight
3.4.2.2.7. Proxy
3.4.2.3. Behavioral Patterns
3.4.2.3.1. Chain of Responsibility
3.4.2.3.2. Command
3.4.2.3.3. Interpreter
3.4.2.3.4. Iterator
3.4.2.3.5. Mediator
3.4.2.3.6. Memento
3.4.2.3.7. Observer
3.4.2.3.8. State
3.4.2.3.9. Strategy
3.4.2.3.10. Template Method
3.4.2.3.11. Visitor
3.4.3. Patterns of Enterprise Application Architecture
3.4.3.1. Domain Logic Patterns
3.4.3.1.1. Transaction Script
3.4.3.1.2. Domain Model
3.4.3.1.3. Table Module
3.4.3.1.4. Service Layer
3.4.3.2. Data Source Architectural Patterns
3.4.3.2.1. Table Data Gateway
3.4.3.2.2. Row Data Gateway
3.4.3.2.3. Active Record
3.4.3.2.4. Data Mapper
3.4.3.3. Object-Relational Behavioral Patterns
3.4.3.3.1. Unit of Work
3.4.3.3.2. Identity Map
3.4.3.3.3. Lazy Load
3.4.3.4. Object-Relational Structural Patterns
3.4.3.4.1. Identity Field
3.4.3.4.2. Foreign Key Mapping
3.4.3.4.3. Association Table Mapping
3.4.3.4.4. Dependent Mapping
3.4.3.4.5. Embedded Value
3.4.3.4.6. Serialized LOB
3.4.3.4.7. Single Table Inheritance
3.4.3.4.8. Class Table Inheritance
3.4.3.4.9. Concrete Table Inheritance
3.4.3.4.10. Inheritance Mappers
3.4.3.5. Object-Relational Metadata Mapping Patterns
3.4.3.5.1. Metadata Mapping
3.4.3.5.2. Query Object
3.4.3.5.3. Repository
3.4.3.6. Web Presentation Patterns
3.4.3.6.1. Model View Controller
3.4.3.6.2. Page Controller
3.4.3.6.3. Front Controller
3.4.3.6.4. Template View
3.4.3.6.5. Transform View
3.4.3.6.6. Two-Step View
3.4.3.6.7. Application Controller
3.4.3.7. Distribution Patterns
3.4.3.7.1. Remote Facade
3.4.3.7.2. Data Transfer Object
3.4.3.8. Offline Concurrency Patterns
3.4.3.8.1. Optimistic Offline Lock
3.4.3.8.2. Pessimistic Offline Lock
3.4.3.8.3. Coarse Grained Lock
3.4.3.8.4. Implicit Lock
3.4.3.9. Session State Patterns
3.4.3.9.1. Client Session State
3.4.3.9.2. Server Session State
3.4.3.9.3. Database Session State
3.4.3.10. Base Patterns
3.4.3.10.1. Gateway
3.4.3.10.2. Mapper
3.4.3.10.3. Layer Supertype
3.4.3.10.4. Separated Interface
3.4.3.10.5. Registry
3.4.3.10.6. Value Object
3.4.3.10.7. Money
3.4.3.10.8. Special Case
3.4.3.10.9. Plugin
3.4.3.10.10. Service Stub
3.4.3.10.11. Record Set
3.5. Zend Framework 2
3.5.1. Building a module
3.5.1.1. Modules
3.5.1.1.1. Setting up the Album module
3.5.1.1.2. Configuration
3.5.1.1.3. Informing the application about our new module
3.5.1.2. Routing and controllers
3.5.1.2.1. module.config.php
3.5.1.2.2. AlbumController.php
3.5.1.2.3. Initialise the view scripts
3.5.1.3. Database
3.5.1.3.1. connect
3.5.1.4. Models
3.5.1.4.1. model classes represent each entity in your application
3.5.1.4.2. ORM
3.5.1.5. Forms and actions
3.5.1.6. gitignore
3.6. We don't have to know the entire technology in details to start working
3.6.1. Know just enough to get the job done
3.6.2. Use google
4. 3. Forms.
4.1. ZF2 sources of knowledge
4.1.1. IRC: #zftalk (#zftalk.2 - closed) on Freenode Webchat
4.1.2. Maillist Subscribe Browse
4.1.2.1. Archive
4.1.3. Webinars
4.1.3.1. (old) Doctrine2 ZF1
4.1.4. Blogs
4.1.4.1. Enrico Zimuel
4.1.4.2. Matthew Weier O'Phinney
4.1.4.3. Rob Allen
4.1.4.4. Ralph Schindler
4.1.4.5. Ryan Mauger
4.1.4.5.1. github
4.1.4.6. Evan Coury
4.1.5. Official site
4.1.5.1. About
4.1.5.1.1. Overview
4.1.5.1.2. FAQ (ZF2 FAQ)
4.1.5.1.3. ZF1 FAQ
4.1.5.1.4. Security
4.1.5.1.5. Changelog
4.1.5.1.6. Blog
4.1.5.1.7. New BSD License
4.1.5.2. Learn
4.1.5.2.1. User Guide
4.1.5.2.2. Reference Guide
4.1.5.2.3. APIs
4.1.5.2.4. Training & Certification
4.1.5.2.5. Support & Consulting
4.1.5.3. Get Started
4.1.5.3.1. Downloads
4.1.5.3.2. Get the Skeleton App
4.1.5.3.3. Try on phpcloud.com
4.1.5.4. Participate
4.1.5.4.1. Overview
4.1.5.4.2. Contributors Guide
4.1.5.4.3. Blogs
4.1.5.5. Contact Us
4.1.5.5.1. form
4.1.5.5.2. mailing lists
4.1.5.5.3. IRC
4.1.6. Zend Framework 2
4.1.6.1. Getting started
4.1.6.2. Reference Guide
4.1.6.3. API
4.1.7. skeleton app
4.1.7.1. Welcome to Zend Framework 2
4.1.7.1.1. ZF2 Skeleton Application
4.1.7.1.2. Fork Zend Framework 2 on GitHub »
4.1.7.2. Follow Development
4.1.7.2.1. wiki
4.1.7.2.2. dev blog
4.1.7.2.3. issue tracker
4.1.7.2.4. ZF2 Development Portal
4.1.7.3. Discover Modules
4.1.7.3.1. on GitHub
4.1.7.3.2. Explore ZF2 Modules »(web site)
4.1.7.4. Help & Support
4.1.7.4.1. IRC: #zftalk (#zftalk.2 - closed) on Freenode
4.1.7.4.2. mailing lists
4.1.7.4.3. Ping us on IRC »
4.1.8. How to use ZF1 libraries in ZF2
4.1.9. Wiki
4.1.10. ? Thorsten Ruf's ZF1(zenddispatch_en.pdf) ?
4.1.11. ? Dispatch ZF2 Diagram ?
4.1.12. ? Front Controller Dispatch Process ?
4.1.13. Dispatch ZF2
4.1.13.1. correct link
4.1.14. Zend Framework 2 Cheat Sheet
4.1.15. ZF2 Patterns
4.1.16. Event Manager
4.1.16.1. Triggered: Zend Framework 2's EventManager
4.1.16.1.1. Event
4.1.16.1.2. Listener
4.1.16.1.3. Event Manager (Connection Bus)
4.1.16.1.4. Priority
4.1.16.1.5. how to trigger
4.1.16.1.6. Listeners
4.1.16.1.7. Custom Events
4.1.16.1.8. Recomendations
4.1.16.1.9. Global Events
4.1.16.1.10. some terms
4.1.16.1.11. other terms
4.1.17. Service Manager ("object manager” or “instance manager”)
4.1.18. The MVC architecture of ZF2
4.1.18.1. New architecture
4.1.18.1.1. MVC
4.1.18.1.2. Di
4.1.18.1.3. Events
4.1.18.1.4. Service
4.1.18.1.5. Module
4.1.18.2. PSR-2 compliant
4.1.18.3. packaging system
4.1.18.3.1. pyrus
4.1.18.3.2. composer
4.1.18.4. PHP 5.3.5
4.1.18.5. Performace Improvments
4.1.18.5.1. Lazy Loading
4.1.18.6. The new core
4.1.18.6.1. ZF1
4.1.18.6.2. ZF2
4.1.18.7. MVC
4.1.18.7.1. separation of concern
4.1.18.7.2. code reusability
4.1.18.8. Event Driven Architecture
4.1.18.8.1. bootstrap
4.1.18.8.2. root
4.1.18.8.3. dispatch
4.1.18.9. A common workflow
4.1.18.10. Default services
4.1.18.10.1. EventManager
4.1.18.10.2. ModuleManager
4.1.18.10.3. Request
4.1.18.10.4. Response
4.1.18.10.5. RouteListener
4.1.18.10.6. Router
4.1.18.10.7. DispatchListener
4.1.18.10.8. VIewManager
4.1.18.11. config/application.config.php
4.1.18.12. public/.htaccess
4.1.18.12.1. The front controller is index.php
4.1.18.13. public/index.php
4.1.18.14. Zend\ServiceManager
4.1.18.14.1. IS A SL (SERVICE LOCATOR) implementation
4.1.18.14.2. Well known object in which you can register object and retrieve them later
4.1.18.14.3. Driven by configuration
4.1.18.15. Type of services
4.1.18.15.1. Explicit
4.1.18.15.2. Invocables
4.1.18.15.3. Factories
4.1.18.15.4. Aliases
4.1.18.15.5. Abstract Factories
4.1.18.15.6. Scoped Containers
4.1.18.15.7. Shared
4.1.18.16. modules
4.1.18.16.1. inform the MVC about services and event listeners
4.1.18.16.2. subset of the app
4.1.18.16.3. Modules are simply
4.1.18.17. module/Application/Module.php
4.1.18.18. module/Application/config/module.config.php
4.1.18.19. module/Application/src/Application/Controller/IndexController.php
4.1.19. ZF 2, Doctrine 2
4.1.19.1. Using Doctrine 2 in Zend Framework 2
4.1.19.2. Install Doctrine 2 on ZF2
4.1.19.3. Doctrine 2 ORM Module for Zend Framework 2 github
4.1.19.4. Tutorial
4.1.19.4.1. github
4.1.20. Composer - Dependency Management for PHP
4.1.20.1. on github
4.1.20.2. Official site
4.1.20.3. Install
4.1.20.3.1. in php folder
4.1.20.3.2. Make sure SSL enabled in PHP
4.1.20.3.3. Make it global
4.1.20.4. use
4.1.20.4.1. Create Project
4.1.20.4.2. Require Module
4.1.20.4.3. Manualy Add a Module
4.1.20.4.4. Don't forget to add the modules to application.config.php
4.1.20.5. Autoloading
4.1.20.5.1. require 'vendor/autoload.php';
4.1.21. Do we need framework at all???
4.1.22. Some tips to write better Zend Framework 2 modules
4.1.22.1. On Russian
4.2. ZF2 Di Theory
4.2.1. Strong Cohesion
4.2.2. Loosly Coupling
4.2.2.1. Decoupling
4.2.3. Reuse
4.2.4. Cost of change
4.2.5. IoC Inversion of Control ( concep)
4.2.5.1. Inversion of Control Containers and the Dependency Injection pattern
4.2.5.1.1. Components and Services
4.2.5.1.2. A Naive Example
4.2.5.1.3. Inversion of Control
4.2.5.1.4. Forms of Dependency Injection
4.2.5.1.5. Using a Service Locator
4.2.5.1.6. Deciding which option to use
4.2.5.1.7. Some further issues
4.2.5.1.8. Concluding Thoughts
4.2.6. Di - Dependancy Injection (pattern)
4.2.6.1. Constructor Injection
4.2.6.1.1. pros
4.2.6.1.2. cons
4.2.6.2. Setter Injection
4.2.6.2.1. pros
4.2.6.2.2. cons
4.2.6.3. Interface injection
4.2.6.3.1. "Aware"
4.2.6.3.2. cons
4.2.6.4. DiC Dependancy Injection Container (tool)
4.2.6.5. sources of information
4.2.6.5.1. webinar
4.2.6.5.2. Documentation on the site
4.2.7. Service Locator (pattern)
4.2.7.1. alternative for Di
4.2.7.2. (SL) Service Locator !== (DiC) Dependancy injection Container
4.2.7.3. But DiC == SL
4.2.7.4. DiC can be the foundation of consumed for Service Location
4.2.7.5. cons
4.2.7.5.1. SL becomes a dependancy
4.2.7.6. pros
4.2.7.6.1. Not all code paths may use all dependancies
4.2.8. Zend\Di (DiC implementation)
4.2.8.1. Not a requirment
4.2.8.2. supprot for both
4.2.8.2.1. constructor
4.2.8.2.2. setter
4.2.8.3. Not "Hello World" friendly
4.2.9. Type-hints
4.3. Event Manager
4.3.1. Space Station Modules
4.3.1.1. Consists by independent modules
4.3.1.2. Each module is build from a group of smaller modules following the same pattern
4.3.1.2.1. The smaller modules are build from even smaller modules following the same pattern etc.
4.3.1.3. Each module can trigger an event
4.3.1.3.1. There are maybe modules listening on this channel (for this event) or maybe not
4.3.1.4. Each module can listen for an event
4.3.1.4.1. But there are maybe modules emitting (notifying) about this event or not
4.3.2. Electronic Circuits
4.3.2.1. Phisical Interfaces
4.3.2.1.1. Logical
4.3.2.1.2. Electrical
4.3.2.1.3. Phisical
4.3.3. Event
4.3.3.1. Something that does happen
4.3.4. Listener
4.3.4.1. a callback
4.3.4.1.1. responds to an event
4.3.5. Event Manager (how to attach a callback listener)
4.3.5.1. a collection of Listeners
4.3.5.2. triggers events
4.3.6. Priority
4.3.7. how to trigger
4.3.8. Listeners
4.3.8.1. Receive a single argument ($e)
4.3.8.2. Any PHP callback
4.3.9. Recomendations
4.3.9.1. __FUNCTION__
4.3.9.1.1. dot-notation
4.3.9.2. pass all input as a parameter
4.3.10. Global Events
4.3.11. some terms
4.3.11.1. trigger/attach
4.3.11.2. public/subscribe
4.3.11.3. notify/listen
4.3.12. more terms
4.3.12.1. target
4.3.12.2. context
4.3.13. associations
4.3.13.1. Environment for signals
4.3.13.2. Wires
4.3.13.3. Channels
4.3.13.4. Connection
4.3.13.5. Bus
4.4. MVC architecutre of ZF2
4.5. Bridge the domain Model and the View layer
4.5.1. spread across
4.5.1.1. Controller
4.5.1.2. Model
4.5.1.3. View
4.5.1.3.1. list = index
4.5.2. Terms
4.5.2.1. Hydration
4.5.2.2. Extraction
4.5.3. The bond
4.5.3.1. $form->bind($model)
4.5.3.1.1. Make the bond
4.5.3.1.2. Fly in the Clouds
4.5.4. Zend Hydrators
4.5.4.1. Zend\Stdlib\Hydrator\ArraySerializable
4.5.4.2. Zend\Stdlib\Hydrator\ClassMethods
4.5.4.3. Zend\Stdlib\Hydrator\ObjectProperty
4.5.4.4. HydratorInterface
4.5.5. Look the "Album" tutorial app
4.5.6. Annotation to unite
5. 4. ORM. Object Relational Mapping.
5.1. Doctrine 2
5.1.1. What is Doctrine?
5.1.2. What are Entities?
5.1.3. Doctrine 2 Working with Associations
5.1.4. Doctrine configuration
5.1.5. EntityManager
5.1.5.1. The main access point
5.1.6. Association Mapping
5.1.7. Getting Started
5.1.8. new Zend Form features explained
5.1.9. Hydrator
5.1.10. Notes on Doctrine 2
5.1.11. Doctrine ZF2 Lection
5.2. Propel
5.3. No SQL DB (ODM)
5.3.1. Mongo DB
5.3.2. Apache CouchDB
5.4. "What is first, the chicken or the egg?"
5.4.1. First build the DB as a result of the system analysis?
5.4.1.1. If you don't know the programming language framework etc.
5.4.1.2. The ORM has tools for reverse engineering to build the classes from DB.
5.4.2. First build the domain logic with classes (Entities) as a result of the system analysis.
5.4.2.1. If you are going to use OOP
5.4.2.2. If you are planning to use ORM
5.4.2.3. If the ORM has tools for creating DB
5.4.2.4. Always keep in mind the DB at the back of your head
5.4.2.5. If you don't know what DB are you going to use'
5.5. Composer is used for the modules (Doctrine)
5.5.1. Cloud 9 offers console but you have to pay
5.5.2. I would prefer to install development stack on a local machine
5.5.2.1. XAMPP
5.5.2.2. Composer
5.6. Local workflow
5.6.1. Start Notepad++
5.6.2. Start Git console
5.6.2.1. Clone the repo
5.6.3. /xampp/apache_start.bat
5.6.4. /xampp/mysql_start.bat
5.6.5. Console for MySQL
5.6.6. Start MongoDB
5.6.6.1. shutdown
5.6.6.2. The 32 bit version works on 46 bit WIn7
5.6.6.3. 64 bit allocates about 4GB disk space
5.6.7. Console for MongoDB
5.6.7.1. show databases = show dbs
5.6.7.2. tables = collections
5.6.7.3. rows = documents
5.6.8. Console for composer
5.6.8.1. Install ONLY ZF2
5.6.8.2. Install ONLY DoctrineORM
5.6.8.3. Install ONLY DoctrineODM
5.6.8.4. Install the Doctrine modules for ZF2
5.6.8.4.1. DoctrineModule
5.6.8.4.2. DoctrineORM Module
5.6.8.4.3. DoctrineODM Module
5.6.9. Allow the modules and setup the connections etc.
5.6.9.1. DoctrineORM
5.6.9.1.1. add DoctrineModule and DoctrineORMModule to your config/application.config.php
5.6.9.1.2. create directory data/DoctrineORMModule/Proxy
5.6.9.1.3. module.config.php or application.config.php
5.6.9.1.4. /config/autoload/
5.6.9.1.5. Registered Service names
5.6.9.1.6. Command Line
5.6.9.1.7. Service Locator
5.6.9.2. DoctrineODM
5.6.9.2.1. my/project/directory/configs/application.config.php
5.6.9.2.2. config/autoload/module.doctrine-mongo-odm.local.php
5.6.9.2.3. create directory my/project/directory/data/DoctrineMongoODMModule/Proxy
5.6.9.2.4. create directory my/project/directory/data/DoctrineMongoODMModule/Hydrator
5.6.9.2.5. Command Line
5.6.9.2.6. Service Locator
5.6.10. Console for Doctrine
5.6.10.1. DoctrineORM
5.6.10.1.1. Commands
5.6.10.1.2. you need cli-config.php and bootstrap
5.6.10.2. DoctrineODM
5.6.10.2.1. Commands
5.6.10.2.2. you need cli-config.php and bootstrap
5.6.10.3. Reverse engineer the DB
5.6.10.3.1. Create the bootstrap.php in your project
5.6.10.3.2. Create cli-config.php
5.6.10.3.3. Create the mappings
5.6.10.3.4. Generate the entities
5.6.10.4. CLI with the ZF2 module doctrine-module.bat
5.6.10.4.1. no bootsrap and cli-config neccessary
5.6.10.4.2. update
5.6.10.4.3. create
5.6.10.4.4. drop and create
5.6.11. Apache Virtual Host
5.6.11.1. .htaccess
5.6.11.2. local.php
5.6.12. links to the projects and initial installation
5.6.12.1. xampp
5.6.12.2. MongoDB
5.6.12.2.1. Download
5.6.12.2.2. Install and run on Windows
5.6.12.3. Composer
5.6.12.3.1. Getting Started
5.6.12.3.2. https://packagist.org/
5.6.12.3.3. Install
5.6.12.4. Doctrine
5.6.12.5. Zend Framework doc
5.6.12.6. Zend Modules
5.6.12.6.1. DoctrineModule on github
5.6.12.6.2. DoctrineORMModule on github
5.6.12.6.3. DoctrineMongoODMModule on github
5.6.12.7. php_intl
5.6.12.8. tinyMCE
5.6.12.8.1. in the view script
5.6.12.9. jQuery Date/Time Entry
5.6.12.9.1. in the view script
5.6.12.10. Dojo, dijit/form/DateTextBox
5.6.12.10.1. Themes and Theming
5.6.12.10.2. dijit/form/DateTextBox
5.6.12.10.3. in the view script
5.6.13. Module.php
5.6.13.1. module.config.php
6. 5. CRUD. Create Retrieve Update Delete.
6.1. WInSCP (native app) for the sensitive files
6.2. With Cloud 9
6.2.1. Only Git
6.2.2. No access to the private key
6.2.2.1. No other app can be used
6.2.3. Only Git tricks but very complex
6.2.3.1. Branch public
6.2.3.2. Branch production
6.2.3.3. Merging is a problem???
6.3. Codenvy
6.3.1. The solution for the sensitive files
6.4. Creating new Controller in Application
6.4.1. branch
6.4.1.1. exp1
6.4.2. module.config.php
6.4.2.1. controllers
6.4.2.1.1. invokables
6.4.3. view
6.4.3.1. optional
6.5. Set MIME type
6.5.1. application/php
6.6. branches
6.6.1. will be more dificult
6.7. approaches
6.7.1. MySQL, Oracle, PostgreSQL etc. API
6.7.1.1. MySQL Functions
6.7.1.1.1. mysql_connect
6.7.2. DBAL: ADOdb, PDO
6.7.2.1. PDO
6.7.2.1.1. PDO Drivers
6.7.2.2. ADOdb
6.7.2.3. ADOdb Active Record
6.7.2.3.1. Dealing with Collections
6.7.2.4. Zend\Db\Adapter
6.7.2.4.1. thin wrapper
6.7.2.5. Doctrine DBAL
6.7.2.5.1. thin wrapper of PDO
6.7.3. Zend\Adapter, Doctrine DBAL
6.7.3.1. Doctrine
6.7.3.1.1. DBAL over PDO
6.7.3.2. Zend
6.7.3.2.1. DBAL Zend\Db\Adapter
6.7.4. ORM technics
6.7.4.1. Design Patterns
6.7.4.1.1. Table Data Gateway
6.7.4.1.2. Row data Gateway
6.7.4.1.3. Active Record
6.7.4.1.4. Data Mapper
6.8. The progress in ZF2
6.8.1. Simple CRUD (with Table Data Gateway)
6.8.1.1. The Result Set is a Collection of Objects (each row is an object)
6.8.1.1.1. The ResultSet is Zend\Db\ResultSet\ResultSet. Each row is an Zend\Db\RowGateway\RowGateway Object. Zend\Db\TableGateway\Feature\RowGatewayFeature('usr_id') in Table Data Gateway
6.8.1.1.2. Return Custom Object
6.8.1.2. The Result Set is an Zend\Db\ResultSet\ResultSet of ArrayObjects. Each row is an ArrayObject.
6.8.1.2.1. The ArrayObject can be used as an ordinar array or as an object. $row->usr_id and $row['usr_id'] will both work
6.8.2. Integrate Doctrine wirh ZF2
6.8.2.1. Doctrine DBAL
6.8.2.1.1. almost the same like Zend\Db\Adapter\Adapter
6.8.2.2. Doctrine Entity Manager
6.8.2.2.1. With separate classes and files for forms and DQL in the controller
6.8.2.2.2. We use annotations to generate forms from the entities
6.8.2.2.3. Entity Repositories
6.9. The evolution
6.9.1. 1) native DB API
6.9.1.1. set of functions and variables
6.9.1.2. difficult to replace
6.9.2. 2) Abstract the connection to DB
6.9.2.1. DBAL OOP. We delegate the communication to DB to an object.
6.9.2.2. We create the SQL statments
6.9.2.3. Easy to replace the RDBMS by changing the Object
6.9.2.4. But we still deal with concrete tables (we have to know the names structure etc.) and we use SQL statements
6.9.3. 3) Abstract the tables - objects in the DB
6.9.3.1. We can change the tables and still be OK
6.9.3.2. Table Data Gateway
6.9.3.3. but we deal with functions which have nothing to do with our domain logic CRUD and we have to know the structure of the DB
6.9.4. 4) Abstract the rows (they better represent the real entities of our domain logic)
6.9.4.1. Row Data Gateway
6.9.5. 5) Add domain logic to these Row Objects. Think for them as Domain Objects. (e.g. teach Object User to tell his name. add tellYourName(), greating etc..)
6.9.5.1. We still think about technical details. We are not detached from the concrete implementation. We have our domain logic in the DB not in the App
6.9.6. 6) Forget about the DB. Create a Domain model using Entities. Network of objects - virtual DB. Data mapper. Persisting is not a concern for this object. We don't need methods like save delete etc. We have ONLY the properties-characteristics of the object and accessory methods to set and get values to the properties.
6.9.6.1. In the perfect world we will not need to save anything to persistent layer. The SSD drives will become the RAM of the computer. Even if you turn your computer off the running programs will keep their state until we decide to exit or close the program.
6.9.7. 7) Forget about the DB. Use a dedicated Data Mapper like Doctrine.
6.9.7.1. We don't have to create the datamapper objects anymore for each table
6.9.7.2. There is Doctirne Entity Manager (ORM) or Doctrine DOcumentManager (ODM)
6.9.7.3. Network of objects. Virtual Data Base
7. 6. JS basics.
7.1. sources of knowledge
7.1.1. David Flanagan
7.1.1.1. JavaScript: The Definitive Guide, Sixth Edition
7.1.1.2. jQuery Pocket Reference
7.1.1.3. JavaScript Pocket Reference, 3rd Edition
7.1.2. Douglas Crockford
7.1.2.1. JavaScript: The Good Parts
7.1.3. Nicholas C. Zakas
7.1.3.1. High Performance JavaScript (Build Faster Web Application Interfaces)
7.1.4. Stoyan Stefanov
7.1.4.1. JavaScript Patterns
7.1.4.2. Object-Oriented Java Script
7.1.5. John Resig
7.1.5.1. Manning: Secrets of the JavaScript Ninja
7.1.6. YUI Theater
7.2. Development
7.2.1. Prototype based
7.2.2. Classless
7.2.3. Object Oriented
7.2.4. Event Driven
7.3. Getting Started Example
7.4. Functions
7.4.1. First Class Objects
7.4.1.1. A function is an instance of the Object type
7.4.1.2. A function can have properties and has a link back to its constructor method
7.4.1.3. You can store the function in a variable
7.4.1.4. You can pass the function as a parameter to another function
7.4.1.5. You can return the function from a function
7.4.2. Example
7.4.3. definitions
7.4.3.1. functions defined with the function statement
7.4.3.2. function defined with literal expression
7.4.3.3. With the Function class
7.4.4. Universal Properties and Methods
7.4.4.1. Properties
7.4.4.1.1. myNewClass.length
7.4.4.1.2. myNewClass.prototype
7.4.4.2. Methods
7.4.4.2.1. myNewClass.call({}, 'arg1', 'arg2')
7.4.4.2.2. myNewClass.apply({}, ['arg1', 'arg2'])
7.4.5. Operators
7.4.5.1. typeof myNewClass
7.4.5.2. myNewClass instanceof Function
7.4.6. Functions methods and Constructors
7.4.6.1. Function Constructor
7.4.6.2. Method
7.5. Objects
7.5.1. Create
7.5.1.1. Created as Literal (Expression)
7.5.1.2. Created with one of the Standart Classes "Object Class"
7.5.1.3. Created with a Constructor that defines a Class of Objects (custom class)
7.5.2. Universal Properties and Methods
7.5.2.1. Properties
7.5.2.1.1. myObject.constructor
7.5.2.2. Methods
7.5.2.2.1. myObject.toString()
7.5.2.2.2. myObject.toLocaleString()
7.5.2.2.3. myObject.valueOf()
7.5.2.2.4. myObject.hasOwnProperty('prop1')
7.5.2.2.5. myObject.propertyIsEnumerable('prop1')
7.5.2.2.6. Object.isPrototypeOf( myObject )
7.5.3. Operators
7.5.3.1. typeof myObject
7.5.3.2. myObject instanceof myClass
7.6. Programming Styles
7.6.1. Pseudoclasical technique
7.6.2. Prototypal style
7.6.3. Functional style
7.7. Ajax
7.7.1. DOM Manipulation
7.7.2. Remouting
7.7.3. Dynamic Behaviour
7.8. Example 1
7.9. Example 2
7.10. Architecture of an app
7.10.1. Leave if you don't like it
7.10.1.1. I am always amazed by the negative people!
7.10.1.1.1. You have to appreciate at least the effort.
7.10.1.1.2. If you have to say something bad, better don't say anything
7.10.1.2. Create somethign yourself.
7.10.1.3. Don't criticise!
7.10.1.4. We live in a free country! Everybody can be stupid and ugly as he likes! :)
7.10.1.5. I have a great lifestyle!
7.10.1.5.1. I am happy and thankful!
7.10.1.6. The fact that somebody doesn't like the ideas, is not going to change the fact I enjoy my life and what I am doing!
7.10.1.7. These are my original ideas
7.10.1.8. Maybe somebody else came up with the same ideas
7.10.1.8.1. Usually the same ideas come to more than one person when the moment is suitable!
7.10.1.8.2. The truth and the ideas are always there the people are just the conductors.
7.10.1.9. I am not asking anybody to watch the videos. If I am the only viewer I still will be happy. they will help me to recall some ideas and concepts.
7.10.1.10. I am doing these videos for myself, my friends, colleagues and students.
7.10.2. lets mimic the real objects and systems
7.10.2.1. Nature
7.10.2.1.1. Plant
7.10.2.1.2. Human
7.10.2.2. Technical systems (They to mimic the nature)
7.10.2.2.1. Space Station
7.10.2.2.2. Motherboard
7.10.3. Everythign starts from a seed
7.10.3.1. Config is the DNA
7.10.3.2. Events (communication object) gives the senses
7.10.3.3. Bootstrap is not really a paradox
7.10.3.3.1. What is first? The chick or the egg?
7.10.3.3.2. What is first the program or the computer? Is it a real paradox?
7.10.3.3.3. it would be a paradox if it is like Baron von Munchausen pulling himself from the swamp.
7.10.3.3.4. Bootstrapping
7.10.3.4. Wizard
7.10.3.4.1. In the case of JS the wizard is (HTML tag)
7.10.3.4.2. The MVC comes later
8. 7. JS toolkits. (frameworks???)
8.1. Dojo Toolkit
8.1.1. Dijit
8.1.2. Getting Dojo
8.1.2.1. Downloading an official release
8.1.2.2. Downloading from Subversion
8.1.2.3. CDN
8.1.3. Hello Dojo
8.1.4. Modern Dojo
8.1.4.1. Migration Guide
8.1.4.2. require()
8.1.4.3. define()
8.1.4.4. module IDs (MID)
8.1.4.5. AMD
8.1.5. Dojo Base and Core
8.1.6. Events and Advice
8.1.7. DOM Manipulation
8.1.8. Waiting for the DOM
8.1.9. Adding Visual Effects
8.1.10. Dijit and Widgets
8.1.11. XHR
8.1.12. Ajax
8.2. jQuery
8.2.1. fluent interfaces and method chaining
8.2.2. An expressive syntax (CSS selectors) for referring to elements in the document
8.2.3. intro
8.2.4. jQuery Basics
8.2.4.1. The jQuery library defines a single global function named jQuery().
8.2.4.1.1. $ as a shortcut for it
8.2.4.2. This single global function with two names is the central query function for jQuery.
8.2.4.3. var divs = $("div");
8.2.4.4. jQuery() is a factory function rather than a constructor: it returns a newly created object but is not used with the new keyword.
8.2.4.5. $("p.details").css("background-color", "yellow").show("fast");
8.2.4.6. method chaining idiom is common in jQuery programming
8.2.4.7. $(".clicktohide").click(function() { $(this).slideUp("slow"); });
8.2.4.8. Obtaining jQuery
8.2.4.8.1. download
8.2.4.8.2. CDN (Content Distribution Network)
8.2.4.9. The jQuery() Function
8.2.4.9.1. $() is to pass a CSS selector
8.2.4.9.2. The second way to invoke $() is to pass it an Element or Document or Window object
8.2.4.9.3. The third way to invoke $() is to pass it a string of HTML text
8.2.4.9.4. Finally, the fourth way to invoke $() is to pass a function to it. If you do this, the function you pass will be invoked when the document has been loaded and the DOM is ready to be manipulated.
8.2.4.9.5. The jQuery library also uses the jQuery() function as its namespace
8.2.4.10. Queries and Query Results
8.2.4.10.1. $("body").length
8.2.5. jQuery Getters and Setters
8.2.5.1. Getting and Setting HTML Attributes
8.2.5.1.1. $("#icon").attr("src", "icon.gif"); set
8.2.5.1.2. $("form").attr("action"); get
8.2.5.2. Getting and Setting CSS Attributes
8.2.5.2.1. $("h1").css("font-weight"); get
8.2.5.2.2. $("div.note").css("border", compound styles "solid black 2px"); set
8.2.5.3. Getting and Setting CSS Classes
8.2.5.3.1. $("h1").addClass("hilite");
8.2.5.4. Getting and Setting HTML Form Values
8.2.5.4.1. $("#surname").val(); get
8.2.5.4.2. $("#email").val("Invalid email address"); set
8.2.5.5. Getting and Setting Element Content
8.2.5.5.1. text()
8.2.5.5.2. html()
8.2.5.6. Getting and Setting Element Geometry
8.2.5.7. Getting and Setting Element Data
8.2.6. Altering Document Structure
8.2.6.1. Inserting and Replacing Elements
8.2.6.2. Copying Elements
8.2.6.3. Wrapping Elements
8.2.6.4. Deleting Elements
8.2.6.4.1. empty() removes all children (including text nodes)
8.2.6.4.2. The remove() method removes any event handlers
8.2.6.4.3. the unwrap()
8.2.7. Handling Events with jQuery
8.2.7.1. Simple Event Handler Registration
8.2.7.2. jQuery Event Handlers
8.2.7.3. The jQuery Event Object
8.2.7.4. Advanced Event Handler Registration
8.2.7.4.1. $('p').bind('click', f);
8.2.7.5. Deregistering Event Handlers
8.2.7.5.1. unbind()
8.2.7.6. Triggering Events
8.2.7.7. Custom Events
8.2.7.8. Live Events
8.2.8. Animated Effects
8.2.8.1. Simple Effects
8.2.8.1.1. fadeIn(), fadeOut(), fadeTo()
8.2.8.1.2. show(), hide(), toggle()
8.2.8.1.3. slideDown(), slideUp(), slideToggle()
8.2.8.2. Custom Animations
8.2.9. Ajax with jQuery
8.2.9.1. The load() Method
8.2.10. Utility Functions
8.2.11. Extending jQuery with Plug-ins
8.2.12. The jQuery UI Library
8.2.12.1. widgets
8.3. Prototype
8.3.1. http://script.aculo.us/
8.4. MooTools
8.5. YUI Library
8.6. Ext JS
8.6.1. Very Good Documentation
8.6.2. JSDuck
8.7. Backbone.js
8.8. Server Side JS
8.8.1. node.js
8.9. AngularJS by Google
8.9.1. on GitHub
8.9.2. MVW
8.10. Twitter Bootstrap
8.10.1. on GitHub
9. 8. JS Zend integration.
9.1. Create a Layout
9.1.1. get the links right
9.1.2. add to your module
9.1.3. Use the View Helpers
9.1.3.1. Doctype Helper
9.1.3.2. HeadLink Helper
9.1.3.3. HeadMeta Helper
9.1.3.4. HeadScript Helper
9.1.3.5. HeadStyle Helper
9.1.3.6. HeadTitle Helper
9.1.3.7. HTML Object Helpers
9.1.3.8. InlineScript Helper
9.1.4. Use existing template example
9.1.5. layout.phtml
9.1.6. change.phtml
9.2. Switch the Layout in the actions
9.3. Load different JS files in the view
9.4. Use widgets (Dojo, jQuery)
9.4.1. jQuery
9.4.2. Dijit
9.4.2.1. js file
9.5. View Helper Json
9.6. Disabling the layout in Zend Framework 2
9.7. Disable the layout and the view
9.8. Communicate to the server (ZF2)
9.8.1. Only with JS
9.8.2. jQuery way
9.8.3. Dojo way
9.8.3.1. example
9.9. Deploy to AppFog
9.10. Change the layout for a module
9.11. index.php
10. 9. Ajax.
10.1. Pure JS
10.1.1. Controller Action
10.1.2. View Script
10.1.2.1. js-ajax.phtml
10.1.3. JS File
10.1.3.1. jsAjax.js
10.2. jQuery
10.2.1. Controller Action
10.2.2. View Script
10.2.2.1. jquery-ajax.phtml
10.2.3. JS File
10.2.3.1. jqueryAjax.js
10.3. Dojo
10.3.1. Controller Action
10.3.2. View Script
10.3.2.1. dojo-ajax.phtml
10.3.3. JS File
10.4. Service
10.4.1. View Script
10.4.2. Controller Action
10.5. JSON service
10.5.1. Controller Action
10.5.2. View Script
11. 10. HTML5 CSS3.
12. Introduction
12.1. What is a Web Development?
12.2. What is the Web Application Development?
12.3. Web Application
12.4. Software engineering
12.4.1. Could be the best job in the world!
12.4.1.1. No boss!
12.4.1.2. No working hours.
12.4.1.3. Full creative freedom!
12.4.1.4. You are an ... alien!
12.4.2. Why some people think "The cariera in IT sucks?"
12.4.2.1. Average salary in the developed countries.
12.4.2.2. A lot of work
12.4.2.3. Age and sex discrimination
12.4.2.4. There are no "old experience professionals"
12.4.2.4.1. Everyone is a newbie
12.4.2.4.2. How can be "old experience professional" in a 6 months old technology
12.4.2.5. You never stop reading and learning
12.4.3. We have to raise the prestige of the profession.
12.4.4. Nothing can stop you if you have a real passion and fun!
12.5. The topics
12.5.1. Server-side (The first 5 Fridays)
12.5.1.1. PHP
12.5.1.1.1. ZF
12.5.2. Client-side (The last 5 Firdays)
12.5.2.1. Front End Engineering
12.5.2.1.1. JavaScript
12.5.2.1.2. HTML
12.5.2.1.3. CSS
12.6. I hold the rights to change the topics as we go.
12.7. Used tools
12.7.1. Web Based, Cloud
12.7.2. The students can change the devices
13. Lessons Learned
13.1. MInd Maps
13.1.1. MindMesiter
13.1.1.1. Presentations
13.1.1.1.1. Difficult
13.1.1.1.2. Do I realy need them
13.1.1.1.3. Tip
13.1.1.2. Upload Images
13.1.1.3. The Android App
13.1.1.4. Not free
13.1.1.5. Notes are very small
13.1.1.5.1. Try bigger font size
13.1.1.6. Use zoom In Out
13.1.1.7. Right Click to collapse expand nodes
13.1.2. MInd42
13.1.2.1. Free
13.1.2.2. Android 2.2
13.1.2.2.1. Stock Browser
13.1.3. Google Presentations
13.1.3.1. Try the combination
13.2. Google+ Hangout
13.2.1. No background noise
13.2.2. Sound Breaking
13.2.3. No zoom
13.2.4. Ask Somebody to watch the live stream
13.3. Speach
13.3.1. Don't use often
13.3.1.1. "In general"
13.3.1.2. "Общо взето..."
13.3.1.3. "etc."
13.3.1.4. "така нататък"
13.3.2. use
13.3.2.1. acurate words
13.3.2.2. pay attention to the details
13.3.2.3. the right words and terms
13.3.3. replace
13.3.3.1. "I don't know"
13.3.3.1.1. with "We will check"
13.4. Other technologies for recording
13.4.1. Try Adobe Flash Media Live Encoder
13.4.2. screencast-o-matic
13.4.2.1. Doesn't even start in FF and Chrome
13.4.2.1.1. Java updates done
13.5. YouTube
13.5.1. Create playlists
13.6. Use HD, at least 720p
13.7. Use screen resolution of 1280x720p for YouTbe HD
13.7.1. Use 1280x1024 top and render at the same resolution in Camtasia.
13.7.1.1. YouTube is not cutting anything 1280x1024 is also OK
13.7.1.2. YouTube is filling the right and left with black
13.7.1.3. Renderin at 1280x1024 is much slower compare to 1280x720
13.7.2. Camtasia cuts top and the bottom to fit in 1280x720
13.7.3. Resolution 1280x720 doesn't work on my screen 4:3. Everythign is distorted.
13.8. codenvy was giving me [ERROR] on git push zend but no changes have been made
13.9. Codenvy
13.9.1. consol - very limited
13.9.2. I can upload RAS private key
13.9.3. No SFTP client
13.10. git
13.10.1. problems the way we use it
13.10.2. idea
13.10.2.1. git rm .
13.10.2.1.1. still doesn't work
13.10.2.2. clone in codenvy instead of doing init
13.10.2.3. use patch and diff at the bottom ofthe pull requests
13.10.2.4. try to use clone in the IDE instead of new project
13.10.2.5. merge manualy with patches (no fetch merge)
13.10.2.5.1. Don't use the original for anything else
13.10.3. check the diffs and the changes before merging
13.11. Cloud 9
13.11.1. NO way to upload RSA private key
13.11.2. Very nice consol
13.11.3. You can run your pages there
13.11.4. No SFTP client
13.12. Maybe we don't need AppFog for the students
13.13. pay atention
13.13.1. <?php echo $this->basePath(); ?>/
13.13.2. css, js, images in public
13.13.3. ActionNames
13.13.3.1. mmLayoutAction
13.13.3.1.1. mm-layout.phtml
13.14. workflow (idea)
13.14.1. fork (in github)
13.14.1.1. clone (no fetch merge) in the IDE
13.14.1.1.1. PullRequest
13.15. some students don't use the original repo to create their modules
13.16. some students keep css, js, images in the folder module
13.17. some students don't add $this->basePath() to the URLs in the layout
13.18. some students use <? echo $this->basePath(); ?>
13.19. correct the paths in css files also
13.20. codenvy approaches
13.20.1. create new project
13.20.1.1. use PaaS
13.20.1.1.1. git init
13.20.2. clone repo or import from github
13.20.2.1. NO PaaS
13.20.2.1.1. clone guthub
13.20.2.1.2. clone zend
13.20.2.2. Projects -> New -> Import from github
13.20.2.2.1. NO PaaS
13.20.2.3. Git -> Clone
13.20.2.3.1. NO PaaS
13.21. frequent mistakes
13.21.1. Add ...Controller.php at the end of the controller files
13.21.2. Add ..phtml as an extension for the view files
13.21.3. redirect
14. praktiki.mon.bg
14.1. 12 weeks
14.1.1. 240 hours per student
14.1.2. 8 hours per mentor
14.1.3. Every Monday 10:00 BG time untill 12:00 - lection
14.1.3.1. for 4 weeks 8 hours are over
14.1.3.2. But I will continue
14.1.4. Every working day consultations from 13:00 untill 17:00 15 min per student
14.1.4.1. In 6-7 weeks the 8 hours will be over
14.1.4.2. But I will continue
14.1.4.3. 1:15 per student per week
14.2. 5 projects
14.2.1. 3 students per project
14.2.1.1. designer
14.2.1.2. server site (back end)
14.2.1.3. front end
14.2.2. projects
14.2.2.1. BTK
14.2.2.2. MGS
14.2.2.3. GRD
14.2.2.4. STO
14.2.2.5. NIK
14.3. Open source project
14.3.1. Regrouping
14.4. communication
14.4.1. Google+ for the lections
14.4.1.1. Google Hangout on Air
14.4.2. Skype for the consultations
14.4.2.1. shared audio files in google drive
14.4.3. Everythign recorded
14.5. Documents shared in Google Drive
14.5.1. Schedule
14.5.2. Students
14.6. Virtualisation
14.6.1. Oracle VM Virtual Box
14.6.1.1. free
14.6.2. VMware
14.6.2.1. free
14.7. Design
14.7.1. Responsive Design
14.8. JS toolkits
14.8.1. jQuery
14.8.2. Dojo
14.9. cheatsheet
14.10. coding naming standards
14.11. Self project vs Zfc
14.11.1. self
14.11.1.1. pros
14.11.1.1.1. better learning
14.11.1.2. cons
14.11.1.2.1. low quality in the beginning
14.11.2. Zf-commons
14.11.2.1. pros
14.11.2.1.1. popular
14.11.2.1.2. somebody else has done the job
14.11.2.1.3. high quality?
14.11.2.2. cons
14.11.2.2.1. integration in our project
14.12. Shell we use modules vs building them from scratch?
14.12.1. common opinion is to use already build modules
14.12.1.1. Zf-commons
14.13. Git HowTo
14.13.1. Centralized Workflow
14.13.2. How It Works
14.13.2.1. Managing Conflicts
14.13.3. Example
14.13.3.1. Someone initializes the central repository
14.13.3.2. Everybody clones the central repository
14.13.3.2.1. git clone ssh://user@host/path/to/repo.git
14.13.3.3. John works on his feature
14.13.3.4. Mary works on her feature
14.13.3.5. John publishes his feature
14.13.3.5.1. git push origin master
14.13.3.6. Mary tries to publish her feature
14.13.3.6.1. git push origin master
14.13.3.7. Mary rebases on top of John’s commit(s)
14.13.3.7.1. git pull --rebase origin master
14.13.3.8. Mary resolves a merge conflict
14.13.3.8.1. git status
14.13.3.8.2. solve the problem
14.13.3.8.3. git rebase --abort
14.13.3.9. Mary successfully publishes her feature
14.13.3.10. Mary successfully publishes her feature
14.13.3.10.1. git push origin master
14.13.4. How to merge PR on GitHub?
14.14. Skeleton App how to start?
14.14.1. composer
14.14.2. git
14.14.2.1. composer
14.14.3. ZFTool
14.14.3.1. How to Install ZFTool
14.14.3.1.1. Installation using Composer¶
14.14.3.1.2. Manual installation
14.14.3.1.3. Without installation, using the PHAR file
14.14.3.2. Usage
14.14.3.2.1. Basic information
14.14.3.2.2. Project creation
14.14.3.2.3. Module creation
14.14.3.2.4. Classmap generator
14.14.3.2.5. ZF library installation
14.14.3.2.6. Compile the PHAR file
14.14.3.2.7. What works for me
14.15. tasks
14.15.1. ss
14.15.1.1. install
14.15.1.1.1. install DoctrineModule
14.15.1.1.2. ZfcUser
14.15.1.1.3. BjyAuthorize
14.15.1.1.4. Doctrine ZfcUser ORM
14.15.1.1.5. SamUser
14.15.1.1.6. cdli/CdliTwoStageSignup
14.15.1.1.7. How To Extend ZfcUser (and other modules) to match my needs?
14.15.2. designers
14.15.2.1. viewhelpers in the layout
14.15.3. Ajax in the scripts
14.16. NetBeans (very good IDE)
14.17. CMS
14.17.1. libracms
14.17.1.1. github
14.17.2. GotCms
14.17.2.1. github
14.17.3. DotsCms
14.18. ideas for name
14.18.1. DB naming standards
14.18.2. SPDX OpenSource Registry
14.19. Lessons Learnd
14.19.1. Using modules
14.19.1.1. CMS
14.19.1.1.1. Monolyte system
14.19.1.1.2. They almost don't use other modules
14.19.1.1.3. Like Joomla, Drupal, WordPress
14.19.1.1.4. No way to register user
14.19.1.1.5. Only Admin can login
14.19.1.1.6. You can not have ordinary users
14.19.1.1.7. Not easy to learn and extend
14.19.1.1.8. Specific Installations
14.19.1.1.9. Not separate modules applications
14.19.1.1.10. Black Box
14.19.1.1.11. Very simple sites with the available CMS
14.20. DB Naming convensions
14.20.1. DB design for mere mortals
14.20.1.1. Table types
14.20.1.1.1. Data
14.20.1.1.2. Linking
14.20.1.1.3. Subset
14.20.1.1.4. Validation
14.20.1.2. Table Names
14.20.1.3. Fields
14.20.1.3.1. Resolving Multipart Fields
14.20.1.3.2. Resolving Multivalued Fields
14.21. ZF2
14.21.1. Form
14.21.1.1. Binding
14.21.2. ZF tool
14.21.3. Tutorial App
14.21.4. Controller Plugins
14.21.5. Zend/Mvc
14.21.5.1. on top of
14.21.5.1.1. Zend\ServiceManager
14.21.5.1.2. Zend\EventManager
14.21.5.1.3. Zend\Http
14.21.5.1.4. Zend\Stdlib\DispatchableInterface
14.21.5.2. sub-components are exposed
14.21.5.2.1. Zend\Mvc\Router
14.21.5.2.2. Zend\Http\PhpEnvironment
14.21.5.2.3. Zend\Mvc\Controller
14.21.5.2.4. Zend\Mvc\Service
14.21.5.2.5. Zend\Mvc\View
14.21.5.3. The gateway to the MVC
14.21.5.3.1. Zend\Mvc\Application
14.21.5.4. Bootstrapping an Application
14.22. mysqladmin change password
14.23. Book
14.24. Authorization
14.24.1. How to get Zend\Authentication\AuthenticationService
14.24.1.1. new instance every time
14.24.1.2. alias invocables in the config
14.24.1.2.1. use Controller Plugin
14.24.2. simple approach with direct use
14.24.2.1. cons
14.24.2.1.1. Problem with more complex requirments.
14.24.2.1.2. No central point
14.24.2.1.3. No separation of concern.
14.24.2.1.4. We don't follow DRY
14.24.2.2. pros
14.24.2.2.1. very intuitive
14.25. Authentication with Doctrine
14.25.1. Comparison with and without Doctrine
14.25.2. AuthenticationService has 2 Drivers
14.25.2.1. Authentication
14.25.2.2. Storage
14.25.3. ViewHelper
14.25.4. ControllerPlugin
14.26. RememberMe
14.27. Registration with Doctrine
14.27.1. Form Class vs Annotation
14.28. Forgotten Password with Doctrine
14.29. navigation
14.29.1. 2 types of pages
14.29.1.1. MVC
14.29.1.2. URI
14.29.2. navigation.global.php
14.29.2.1. navigation
14.29.2.2. service_manager
14.29.2.2.1. factories
14.29.3. layout/layout
14.29.3.1. ViewHelper
14.29.4. the guard for the controllers and navigation use different mechanisms
14.29.4.1. navigation view helper
14.29.4.2. event listener
14.29.4.3. These 2 controllers access and navigation are independent systems. We have to sync them
14.30. pagination
14.30.1. Zend Paginator
14.30.1.1. module.config.php
14.30.1.1.1. new rout
14.30.1.2. Controller Index
14.30.1.3. view script
14.30.1.3.1. add the view helper
14.30.1.3.2. create the partial
14.30.2. Doctrine Paginator
14.31. phpUnit
14.32. phpDocumentor
14.32.1. Install
14.32.1.1. PEAR
14.32.1.1.1. $ pear channel-discover pear.phpdoc.org
14.32.1.1.2. $ pear install phpdoc/phpDocumentor
14.32.1.2. composer
14.32.1.2.1. $ php composer.phar require phpdocumentor/phpdocumentor WHEN asked dev-develop
14.32.1.2.2. call it
14.32.1.3. phar
14.32.1.3.1. Download the phar file
14.32.2. Getting Started
14.32.2.1. vendor\bin\phpdoc.php.bat --help
14.32.2.2. vendor\bin\phpdoc.php.bat -d <folder to parse> -t <target>
14.32.2.3. $ phpdoc -d [SOURCE_PATH] -t [TARGET_PATH]
14.32.3. phpdoc.xml
14.32.4. What is a docblock
14.32.5. Which structural elements can have a DocBlock
14.32.5.1. namespace
14.32.5.2. require(_once)
14.32.5.3. include(_once)
14.32.5.4. class
14.32.5.5. interface
14.32.5.6. trait
14.32.5.7. function (including methods)
14.32.5.8. property
14.32.5.9. constant
14.32.5.10. variables, both local and global scope.
14.32.6. A DocBlock roughly exists of 3 sections:
14.32.6.1. Short Description; a one-liner
14.32.6.2. Long Description;
14.32.6.3. Tags;
14.32.7. Inline tag reference
14.32.7.1. inline
14.32.7.1.1. {@example [location] [<start-line> [<number-of-lines>] ] [<description>]}
14.32.7.2. tag
14.32.7.2.1. @example [location] [<start-line> [<number-of-lines>] ] [<description>]
14.32.8. Definition of a ‘Type’
14.32.8.1. string
14.32.8.2. integer or int
14.32.8.3. boolean or bool
14.32.8.4. float or double
14.32.8.5. object
14.32.8.6. mixed
14.32.8.7. array
14.32.8.8. resource
14.32.8.9. void
14.33. php-cs-fixer
14.33.1. GitHub
14.33.2. Install
14.33.2.1. Download php-cs-fixer.phar
14.33.3. Run
14.33.4. Update
14.33.5. Usage
14.33.5.1. On my system
14.33.5.2. Dry run
14.33.5.3. One file only
14.34. php-CodeSniffer
14.34.1. GitHub
14.34.2. Documentation
14.34.3. composer installation
14.34.4. blog
14.34.5. Documentation
14.35. less popular CS
14.35.1. PHPCP
14.35.2. Flitch
14.36. PSR-0, PSR-1, PSR-2
14.36.1. PSR0