Sunday
3
April
2011

Using GIT with Zend Studio

Hy fellows,

in one of my last posts I described how to use GIT under Windows.

Now as Zend released Zend Studio 8 and ZF migrates to GIT with the next major release it’s time so see how those can be matched to work together. Note that this is not fixed to Windows but should work regardless of the use OS in any environment.

Prerequisits
What do you need to start?

I assume that you already have a working GITHUB repository as described in the last post.
Then you need a installed version of Zend Studio 8 or newer.

Installing GIT
Now you need to make your Zend Studio aware of GIT. Therefor we need to install EGit. EGit is a module for Eclipse which makes Zend Studio (which is based on Eclipse) understand GIT and provides several tools for working with GIT.

  • To install EGit open Zend Studio
  • Click “Help”
  • Click “Install New Software…”
  • Click “Add…”
  • Enter “EGit” as “Name”
  • Enter “http://download.eclipse.org/egit/updates” as “Location”
  • Select all modules by clicking “Select all” (you could omit the two moduls only containing “Source” if wished)
  • Click “Next” until you see the license agreements
  • Click “Agree” on all license agreements (of course read the agreements before you agree)
  • At last click “Finish”

Now EGit will be installed within Zend Studio. As last step you will need to restart Zend Studio (if it is not done automatically).

Security preparations

When you already used GIT you will know that it needs RSA keys. So our next step is to make new keys which will be used within Zend Studio to commit to GITHUB.

  • Open Zend Studio
  • Click “Window”
  • Click “Preferences”
  • Expand “General”
  • Expand “Network Connections”
  • Open “SSH2”
  • Go to the tab “Key Management”

Now you can eighter use an existing key or add a new one.

To load an existing key:

  • Click “Load Existing Key…”
  • Within the explorer window go to the directory where you stored the existing key for GITHUB and select it
  • Enter the “Passphrase” when your key needs a passphrase
  • Confirm the “Passphrase” when your key needs a passprase
  • Click “OK”

It is preferred to make a new key instead of loading an existing one. Therefor:

  • Click “Generate RSA Key…”
  • Leave the passphrase empty (this simplifies the later handling)
  • Click “Save Private Key…”
  • Click “OK” to confirm that you want no passphrase
  • Within the explorer window go to the directory where you want to store your keys
  • Click “OK”
  • Click “OK” once more
  • Open GITHUB within your Internet Browser and login to your account
  • Click “Account Settings…”
  • Click “Public SSH Keys…”
  • Click “Add another public key…”
  • Enter “Zend Studio” as Title
  • Copy the public key which you can see within Zend Studio as key into GitHub
  • Click “Add Key…”

At last, regardless is you added an existing or created a new key, click “OK” within Zend Studio to close the preferences window and save the settings. You have successfully prepared Zend Studio to be used with your GitHub account.

Connecting to GitHub

The next step is to connect our GITHUB account to Zend Studio.

  • Open Zend Studio
  • Click “File”
  • Click “Import…”
  • Now expand “GIT”
  • Select “Projects from GIT”
  • Click “Next”
  • Click “Clone…”
  • Open a Internet Browser and login to your GITHUB account
  • Click your ZF2 repository
  • Click”HTTP” (it is near SSH, HTTP…)
  • Copy the link which is shown (should look like “https://accoutname@github.com….” into your clipboard
  • Copy the link from your clipboard into “URI” within the opened Zend Studio tab
  • Enter your GITHUB password within “Password”
  • Click “Next”
  • Click “Next” once more to add all branches
  • Enter the directory into “Directory” where you want to store the local repo (this should be an empty/new directory)
  • Click “Finish”

This step will take several minutes as it now copies your remote repository to your local drive.
We’re done. You have successfully connected your GIT repository with Zend Studio.

You can now do your complete work from within Zend Studio. It supports all needed tools. Some of these tasks I will describe now:

Create a new branch

To create a new branch do the following:

  • Right-Click your project
  • Click “Team”
  • And then click “Branch…”
  • Click “New Branch…”
  • Enter the name of the new branch to “Branch Name…”
  • Select “Rebase” (with “None” you will not be able to commit your changes to your GitHub account)
  • Click “Finish”

Now you’re working within a new created branch.
Keep in mind to use the proper naming convention.
“hotfix/ZFxxxx” for quick fixes and “feature/XXXX” for new features. Always use “ZFxxxx” when there is a related issue within Jira.

Committing changes

Committing your changes is also quite simple:

  • Right-Click your project
  • Click “Team”
  • Click “Commit”
  • Enter a note about what you’re committing within “Commit Message…”

I always use notes like this:

[feature/MyFeature]
 - changed something
 - another change
  • Select the files which you want to commit
  • Click “Finish”

Now your change is stored in your local repository. To send your changes to your GITHUB repository you need to do the following:

  • Right-Click your project
  • Click “Team”
  • Click “Push to Upstream”
  • Click “OK”

At last your changes are also available within your GITHUB repository.
To have your change integrated within ZF2 you need to make a “Pull-Request” from your GITHUB repository.

The above description does not only work for Zend Framework but can also be used for other projects.
I hope you find this post interesting so I wish you a good work and have fun with GIT.

Greetings
Thomas Weidner
I18N Team Leader, Zend Framework

Zend Framework Advisory Board Member
Zend Certified Engineer for Zend Framework

Back to top
Sunday
2
January
2011

Zend_Locale 2.0

Hy fellows,

first I want to wish you all a good start into this new decade.
Then I wanted to inform you about some news for Zend Framework.

Within the last days I began a complete rework of the I18n core for ZF.
The first class which will be reworked is Zend_Locale as it’s the base class for I18n within ZF.

The following changes will be done for Zend Locale 2.0:

CLDR update to 1.9
This integrates the most actual locale database within ZF

Usage of a fallback locale
This locale can be set and used as fallback when the wished locale is not supported

Usage of a fixed locale
This locale can be set and will be used regardless of any other locale which the accessing user wants
This removes the workaround from Zend_Application

Add locale providers as base
This allows to use other locale providers than CLDR
This will remove Zend_Locale_Format and integrate it into the used provider

Rework CLDR to be a provider

Add INTL as new provider
This allows to use INTL when available alone or in combination with CLDR because the INTL extension does not provide all informations like CLDR

Add a way to upgrade a locale
This would allow to provide informations for language locales when no region was given (f.e. when a user gives ‘en’ and wants to have informations from a region (f.e. currency))

Add script support
This allows to use locales which provide several scripts within the same language like Azerbaijani, English or Hausa.

That’s the actual plan for Zend_Locale 2.0 and will be the base for all other reworks.
Please note that all spoken will be done within Zend Framework 2.0 and not be migrated to 1.x.

Greetings
Thomas Weidner
I18N Team Leader, Zend Framework

Zend Framework Advisory Board Member
Zend Certified Engineer for Zend Framework

Back to top
Sunday
2
May
2010

Validation of two values or how to proove identical-ness

Hy interested ones,

today I integrated two improvements for Zend_Validate_Identical.

Zend_Validate_Identical is a validator which enables you to check if two values are identical.
Values means in this case string, integers, floats, or even objects.

A manual validation would look like this:

$valid = new Zend_Validate_Identical(array('token' => '1234'));
	
if ($valid->isValid($input)) {
    // let's go on
} else {
    // oops... not valid
}

Simple as is…

Now, when $input is the string “1234” we will get true. When it differs we will get false. This means even if we have a integer “1234” the validation will fail. The reason behind this behaviour is that Zend_Validate_Identical does a strict validation including the type of the input.

But sometimes it is wished and necessary to validate only the content regardless of it’s type.
Zend_Validate_Identical supports now also non-strict validation. See the following example:

$valid = new Zend_Validate_Identical(
    array('token' => '1234', 'strict' => false)
);
	
if ($valid->isValid($input)) {
    // let's go on
} else {
    // oops... not valid
}

As you can see the above example is nearly identical to the first example with one difference. We defined the property strict to be false. By using this option we said Zend_Validate_Identical to use non-strict validation.

In this case, when $input is a integer “1234” we will also get true in return and also when it’s a float “1234”.

Now what to do when you want to validate if two form elements are identical. Seems tricky as Zend_Validate_Identical has no connection to Zend_Form, and it would not know which two elements you want to validate.

Easy as is, you can now give the elements name as token which holds the token to validate against. What does this mean? Let’s see a little example:

<?php
error_reporting(E_ALL|E_STRICT);
ini_set('include_path',ini_get('include_path').PATH_SEPARATOR.'../library');
require_once('Zend/Loader/Autoloader.php');
$loader = Zend_Loader_Autoloader::getInstance();
print "<pre>";
	
$request = new Zend_Controller_Request_Http();
	
// setup the form
$form = new Zend_Form();
$form->setMethod(Zend_Form::METHOD_POST)
$form->addElement('password', 'password1');
$form->addElement('password', 'password2', array(
    'validators' => array(
        array('identical', false, array('token' => 'password1'))
    )
));
$form->addElement('submit', 'submit');
	
// check the form
if($request->isPost()) {
    $formData = $request->getPost();
    if($form->isValid($formData)) {
        $form->getValues();
        echo "FORM VALID";
    } else {
        print "\nVALIDATION FAILURE:";
        print_r($form->getMessages());
    }
}
print "</pre>";
?>
<html>
<head>
<title>Test</title>
</head>
<body>
<?php echo $form->render(new Zend_View());?>
</body>
</html>

You can run the above example standalone in your browser. It shows you the behaviour of Zend_Validate_Identical and how to combine it efficent within Zend_Form.

For us the important line is:

$form->addElement('password', 'password1');
$form->addElement('password', 'password2', array(
    'validators' => array(
        array('Identical', false, array('token' => 'password1'))
    )
));

As you see we added the Identical validator to the second element by using the first elements name as token.
This way the value of the first element is compared with the value of the second element.

Simple as is :-)

This is handy when you want to validate two user inputs. For example when your user has to enter his email adress two times to be sure he did not mistype it, or he has to enter the same password two times.

Note that these two described features are available within trunk and as with ZF 1.10.5 and NOT BELOW.

I hope you find this two features useful. More to come soon…

Greetings
Thomas Weidner
I18N Team Leader, Zend Framework

Zend Framework Advisory Board Member
Zend Certified Engineer for Zend Framework

Back to top