<?xml version="1.0" encoding="UTF-8"?><!-- generator="wordpress.com" -->
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	>

<channel>
	<title>cakephp &amp;laquo; WordPress.com Tag Feed</title>
	<link>http://wordpress.com/tag/cakephp/</link>
	<description>Feed of posts on WordPress.com tagged "cakephp"</description>
	<pubDate>Tue, 07 Oct 2008 17:01:36 +0000</pubDate>

	<generator>http://wordpress.com/tags/</generator>
	<language>en</language>

<item>
<title><![CDATA[CakePHP, Prototype &amp; Json]]></title>
<link>http://toanhm.wordpress.com/?p=21</link>
<pubDate>Tue, 07 Oct 2008 02:44:31 +0000</pubDate>
<dc:creator>toanhm</dc:creator>
<guid>http://toanhm.de.wordpress.com/2008/10/07/cakephp-prototype-json/</guid>
<description><![CDATA[Trong một bài viết gần đây, tôi có giới thiệu qua về một mô hình và công cụ]]></description>
<content:encoded><![CDATA[<p>Trong một <a href="http://toanhm.wordpress.com/2008/10/06/mo-hinh-he-thong-va-cong-cu/">bài viết gần đây,</a> tôi có giới thiệu qua về một mô hình và công cụ, frameworks để phát triển các sản phẩm cộng đồng cần khả năng chịu tải và mở rộng cao. CakePhp, Prototype &#38; Json là 3 công cụ đầu tiên mà chúng ta cần phải học. Tích hợp CakePhp, Prototype &#38; Json không khó, cái khó là bạn hiểu CakePhp như thế nào để tích hợp Json vào. Tôi mới chỉ biết đến cái không khó, còn cái khó kia thì từ từ tôi sẽ phải học tiếp vậy. Chúng ta bắt đầu tích hợp nào:</p>
<p>1. Download và cài đặt CakePhp 1.2x</p>
<p> </p>
<p>2. Download Prototype</p>
<p> </p>
<p>3. Cấu hình cho Json</p>
<p> </p>
<p>3. Một ví dụ đơn giản.</p>
<p> </p>
<p> </p>
<p>To be continous ...</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Introduction to CakePHP features (build an app in less than 15 minutes)]]></title>
<link>http://teknoid.wordpress.com/?p=293</link>
<pubDate>Tue, 07 Oct 2008 02:34:53 +0000</pubDate>
<dc:creator>teknoid</dc:creator>
<guid>http://teknoid.de.wordpress.com/2008/10/06/introduction-to-cakephp-features-build-an-app-in-less-than-15-minutes/</guid>
<description><![CDATA[I would like to showcase the awesome power of CakePHP by providing an introductory tutorial, which i]]></description>
<content:encoded><![CDATA[<p>I would like to showcase the awesome power of CakePHP by providing an introductory tutorial, which is going to cover some basics as well as slightly more advanced features such as the Auth (user authorization) component. </p>
<p>The goal of this tutorial is to setup a working application, which is going to have: user registration, login/logout functionality, user homepage, basic access control, data (form) validation and a flexible base to expand upon. Oh yeah, we'll get all that done in just under 15 minutes and with only about 120 lines of code...</p>
<p>I assume that at this point you've got CakePHP installed and working. It would also be helpful to know the basic concepts and possibly have tried the <a href="http://book.cakephp.org/view/219/Blog">blog tutorial</a>. </p>
<p>The steps I take to build the app may not be very intuitive for a beginner, but I do provide explanations of each feature/step and hopefully at the end you'll see how everything comes together.</p>
<p>Let's begin...</p>
<p>We need a users table in our database to hold the User data, here's a sample for MySQL:</p>
<p>[sourcecode language="sql"]<br />
CREATE TABLE IF NOT EXISTS `users` (<br />
  `id` int(11) NOT NULL auto_increment,<br />
  `name` varchar(200) NOT NULL,<br />
  `email` varchar(200) NOT NULL,<br />
  `username` varchar(200) NOT NULL,<br />
  `password` varchar(200) NOT NULL,<br />
  `status` tinyint(1) NOT NULL default '1',<br />
  `company_id` int(11) NOT NULL,<br />
  `created` datetime NOT NULL,<br />
  `modified` datetime NOT NULL,<br />
  PRIMARY KEY  (`id`)<br />
) ENGINE=MyISAM  DEFAULT CHARSET=latin1;<br />
[/sourcecode]</p>
<p>Next, we'll create a system-wide controller, otherwise known as App Controller. Think of it as a global controller, whose properties and methods are accessible to all other controllers of the application. </p>
<p>Go into your main app directory (something like /home/teknoid/cake/app) and create a file named app_controller.php there.</p>
<p><strong>app_controller.php</strong><br />
This is what it should look like:</p>
<p>[sourcecode language="html"]<br />
class AppController extends Controller {<br />
    var $components = array('Auth');</p>
<p>    function beforeFilter() {<br />
        $this->Auth->allow('display');<br />
        $this->Auth->loginRedirect = array('controller'=>'users', 'action'=>'index');<br />
    }<br />
}<br />
[/sourcecode]</p>
<p>Let's take a look at what we did here...<br />
We know that our app is going to need user authentication, therefore we include CakePHP's built-in component with <code>var $components = array('Auth');</code><br />
We then create a special function <code>beforeFilter()</code>, which is going to be executed before all other actions in our application, so this is a pretty good time to tell the Auth component about some things (settings) that it should be aware of.<br />
For example, we allow a special action called 'display' <code>$this-&#62;Auth-&#62;allow('display')</code> and we also tell the Auth component that, by default, upon login a user should be redirected to the 'index' action (or their homepage) <code>$this-&#62;Auth-&#62;loginRedirect = array('controller'=&#62;'users', 'action'=&#62;'index');</code>.<br />
I do not want to go into much detail about the specifics of this setup, but overall this is a pretty basic and generic way to set-up the authentication in a CakePHP application.</p>
<p>Next, we are going to build our Users Controller.<br />
Go into app/controllers and create a file named users_controller.php</p>
<p><strong>users_controller.php</strong><br />
This is what it should look like: </p>
<p>[sourcecode language="html"]<br />
class UsersController extends AppController {</p>
<p>        var $name = 'Users';<br />
        var $helpers = array('Time');</p>
<p>        function beforeFilter() {<br />
           parent::beforeFilter();</p>
<p>           if($this->action == 'add') {<br />
               $this->Auth->authenticate = $this->User;<br />
           }</p>
<p>           $this->Auth->allow('add');<br />
        }</p>
<p>        function index() {<br />
            $this->set('user', $this->User->find('first',<br />
                                                             array(<br />
                                                                'conditions'=>array(<br />
                                                                     'User.id'=>$this->Auth->user('id')))));<br />
        }   </p>
<p>        function add() {<br />
            if(!empty($this->data)) {<br />
                $this->User->save($this->data);<br />
            }<br />
        }   </p>
<p>        function login() {</p>
<p>        }   </p>
<p>        function logout() {<br />
            $this->redirect($this->Auth->logout());<br />
        }     </p>
<p>    }<br />
[/sourcecode]</p>
<p>Here's what we did...<br />
We've included the built-in Time Helper <code>var $helpers = array('Time');</code>, which basically helps to format (into something human readable) the date and time fields from the database... amongst other things. Later we'll use it to format the date/time information on our user's homepage. </p>
<p>You've noticed that we have another <code>beforeFilter()</code> function as we did in the App Controller. In this example we inherit our parent (App Controller) functionality by using <code>parent::beforeFilter()</code> and then we specify some additional settings for Auth that will be specific to the Users Controller.</p>
<p>Before we procede, I'd like to point out that Auth component will automatically hash your passwords with sha1() + a security salt you've setup during configuration/installation of CakePHP. Be sure to make the password column in your DB long enough to account for the hashed value (plain text passwords will not be stored).</p>
<p>This line <code>$this-&#62;Auth-&#62;authenticate = $this-&#62;User;</code> might be a little unusual...<br />
The quick explanation, as to why I did that, is because Auth component allows us to override the way it handles some things, which offers great flexibility. Personally, I had a little beef with the way Auth handles password hashing, but as you can see it only bothered me during the 'add' action <code>if($this-&#62;action == 'add')</code>, in which case I provided my own authentication object (the User model). This is going to become a lot more clear later on (just keep it in mind for now).</p>
<p>To keep things secure from the get-go, we have to be very explicit about what actions we allow the user to access without having to login first. By default Auth is going to redirect the user to the login form regardless of what page one tries to access. Of course it would be really sad for the user, if we didn't tell Auth that 'add' action can be accessed without login <code>$this-&#62;Auth-&#62;allow('add');</code>.<br />
It is important to point out that Auth will assume that 'login' and 'logout' are always accessible and you shouldn't specify those in the list of allowed actions.</p>
<p>Alright, our basic setup is complete and now we've added some actions into our Users Controller.</p>
<p><strong>index()</strong>  This is going to be our user's homepage. Remember how we told Auth that upon login the user should be redirected <code>$this-&#62;Auth-&#62;loginRedirect = array('controller'=&#62;'users', 'action'=&#62;'index');</code>? Well, now we've actually got that part taken care of. The action is really simple, it finds all the information about our logged in user and sets it ready for the view.</p>
<p><strong>add()</strong> No mystery here, this is our user registration action and it should be quite obvious as to what it does.</p>
<p><strong>login()</strong> It is this easy to get the basic login functionality working... i.e. you don't even need to write any code. Auth is smart enough to do the work for you. Of course you can easily change the way Auth does things by extending this action beyond the basics.</p>
<p><strong>logout()</strong> Once the user clicks a "Log out" link he/she will be redirected to the default location, which happens to be back to the login form. Good enough for this example.</p>
<p>Now that we've got some of our actions finished up, let's create the views for each one (a view is the actual page that the user is going to see in the browser).</p>
<p>Go to app/views/ and create a directory named 'users'. Then in that directory add a view file for each of the actions (except logout, since it doesn't need one).</p>
<p><strong>index.ctp - our homepage</strong><br />
[sourcecode language="php"]<br />
<?php echo $html->link('Log out', array('controller'=>'users', 'action'=>'logout')); ?></p>
<div>
    Hello, <?php echo $user['User']['name']; ?>
</div>
<div>
    Your account was created <?php echo $time->niceShort($user['User']['created']); ?>
</div>
<p>[/sourcecode]</p>
<p>This is a very simple view page, but it does show how you can access the various user information in the view. If you look back to our <code>index()</code> action in the Users Controller, you'll see that we set a <code>$user</code> variable, which contains an array of user data and now we can echo it in the view.<br />
Remember that Time Helper we've included earlier in our Users Controller? Well, here we're using it to transform our database DATETIME field's value, into a nice, human readable output by using: <code>echo $time-&#62;niceShort($user['User']['created']);</code></p>
<p><strong>login.ctp - our login page</strong><br />
[sourcecode language="php"]<br />
if  ($session->check('Message.auth')) $session->flash('auth');<br />
    echo $form->create('User', array('action' => 'login'));<br />
    echo $form->input('username');<br />
    echo $form->input('password');<br />
    echo $form->end('Login');</p>
<p>[/sourcecode]</p>
<p>Even though we don't need any code for the <code>login()</code> action we still need to setup a basic form to display to the user. Nothing fascinating here, just note that first line <code>if  ($session-&#62;check('Message.auth')) $session-&#62;flash('auth');</code>, which allows us to display any messages triggered by the Auth component.</p>
<p><strong>add.ctp - our registration page</strong><br />
[sourcecode language="php"]<br />
    echo $form->create();<br />
    echo $form->input('name');<br />
    echo $form->input('email');<br />
    echo $form->input('username');<br />
    echo $form->input('password');<br />
    echo $form->input('password_confirm', array('type'=>'password'));<br />
    echo $form->end('Register');<br />
[/sourcecode]</p>
<p>Here we have setup a basic form for the registration. Again there is really nothing fancy here... just a basic form, which will be brilliantly built by the Form Helper.</p>
<p>If you haven't tried already, go ahead now:</p>
<p>Try to access http://yourlocalhost/users/shouldntAccessThis<br />
- Auth component should redirect you to the login form, since we've never specified that 'shouldntAccessThis' is allowed.</p>
<p>Try to access http://yourlocalhost/users/add<br />
- You should see a registration form</p>
<p>So far so good, but we've got to setup some validation rules for our registration form...<br />
For this we create our User Model.</p>
<p>In app/models/ create the file user.php</p>
<p><strong>user.php</strong><br />
This is what it should look like: </p>
<p>[sourcecode language="html"]<br />
class User extends AppModel {</p>
<p>        var $name = 'User';</p>
<p>        var $validate = array(<br />
            'name'=>array(<br />
                          'rule'=>array('minLength', 4),<br />
                          'message'=>'Name has to be at least four characters'),</p>
<p>            'email'=>array(<br />
                          'rule'=>array('email'),<br />
                          'message'=>'Please enter a valid email'),</p>
<p>            'username'=>array(<br />
                              'Username has to be at least four characters'=>array(<br />
                                  'rule'=>array('minLength', 4)<br />
                              ),<br />
                              'This username is already taken, please try another'=>array(<br />
                                  'rule'=>'isUnique'<br />
                              )),</p>
<p>            'password'=>array(<br />
                              'Password cannot be empty'=>array(<br />
                                   'rule'=>array('notEmpty')<br />
                                ),<br />
                              'Password must be at least four characters'=>array(<br />
                                   'rule'=>array('minLength', 4)<br />
                                ),<br />
                              'Passwords must match'=>array(<br />
                                   'rule'=>array('passwordCompare', 'password_confirm')<br />
                              ))<br />
        );</p>
<p>        function passwordCompare($data, $fieldTwo) {   </p>
<p>            if($data['password'] != $this->data[$this->alias][$fieldTwo]) {<br />
                 $this->invalidate($fieldTwo, 'Passwords must match');<br />
                 return false;<br />
            } </p>
<p>            return true;<br />
        }</p>
<p>        function hashPasswords($data, $enforce=false) {            </p>
<p>           if($enforce && isset($this->data[$this->alias]['password'])) {<br />
               if(!empty($this->data[$this->alias]['password'])) {<br />
                   $this->data[$this->alias]['password'] = Security::hash($this->data[$this->alias]['password'], null, true);<br />
               }<br />
           }</p>
<p>           return $data;<br />
        }</p>
<p>        function beforeSave() {<br />
            $this->hashPasswords(null, true);</p>
<p>            return true;<br />
        }<br />
    }<br />
[/sourcecode]</p>
<p>So this is the big guy. The User Model handles our validation logic and also overrides some of the default Auth component functionality. Remember how I said that we'll use the User model to override default Auth behavior <code>$this-&#62;Auth-&#62;authenticate = $this-&#62;User;</code> during the 'add' action? Well here I have built my own <code>hashPasswords()</code> method, which overrides the Auth component's default one. Without going into a long winded explanation I'll just say that I prefer to hash the passwords just before saving the data (hence the little <code>beforeSave()</code> method) because it makes my life easier, and it also shows how easily Auth can be extended to behave the way you want it to.</p>
<p>Let's take a look at <code> passwordCompare()</code>. This is my custom validation method to compare 'password' and 'password_confirm' fields (look back to our add.ctp view).<br />
<code>$this-&#62;invalidate($fieldTwo, 'Passwords must match');</code> will cause the 'password_confirm' field to be marked as invalid in addition to the 'password' field. This is nice if you've got some CSS that, perhaps, puts a red border on the input box for the invalid field (notice that we've also set the error message).<br />
Another trick (I'm not quite sure honestly if it's a documented feature) is to use really nice, human readable names for a given rule. This is in case you use multiple rules per field as we do for our 'password' field. This way, in case of an error, the arbitrary rule name will be used for the error message.</p>
<p>Go ahead, try it out with some invalid and then valid data... If all goes well, you should see an SQL debug showing the inserted user data, which confirms that your form is working correctly.</p>
<p>And there you have it... A complete, functional app in about 10-12 minutes.</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[CakePHP + MySQL + Tinyint(1) = Confusion]]></title>
<link>http://teknoid.wordpress.com/?p=289</link>
<pubDate>Mon, 06 Oct 2008 18:11:25 +0000</pubDate>
<dc:creator>teknoid</dc:creator>
<guid>http://teknoid.de.wordpress.com/2008/10/06/cakephp-mysql-tinyint1-confusion/</guid>
<description><![CDATA[Just a quick note to point out that CakePHP fakes a BOOLEAN field in MySQL by using tinyint(1). MySQ]]></description>
<content:encoded><![CDATA[<p>Just a quick note to point out that CakePHP fakes a BOOLEAN field in MySQL by using tinyint(1). MySQL doesn't have a native support for BOOLEAN.</p>
<p>Therefore if you attempt to save some value other than 0 or 1, CakePHP will not allow you to do that (instead it will just save 1). The easiest way to get around this is to make your field tinyint(2), as one option.</p>
<p>FYI, supporting ticket: <a href="https://trac.cakephp.org/ticket/3903">https://trac.cakephp.org/ticket/3903</a></p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Mô hình hệ thống và công cụ !]]></title>
<link>http://toanhm.wordpress.com/?p=18</link>
<pubDate>Mon, 06 Oct 2008 04:50:27 +0000</pubDate>
<dc:creator>toanhm</dc:creator>
<guid>http://toanhm.de.wordpress.com/2008/10/06/mo-hinh-he-thong-va-cong-cu/</guid>
<description><![CDATA[Từ khi dùng CakePHP, tôi gần như sang một trang mới về hướng phát triển sản ph]]></description>
<content:encoded><![CDATA[<p>Từ khi dùng CakePHP, tôi gần như sang một trang mới về hướng phát triển sản phẩm. Khác xưa khá nhiều, tạm bỏ .NET, C# và các công nghệ của Microsoft, tôi chuyển hướng sang phát triển những sản phẩm hệ thống mạng cộng đồng có thể cung cấp dịch vụ cho cả hàng triệu người dùng, hàng tỷ lượt truy cập và visit mỗi ngày. Đó không phải là ước mơ, đó là kế hoạch và tôi đã có những giải pháp và đường hướng đi cho chính tôi, cho những sản phẩm mà tôi sẽ phát triển. Bước đầu chuyển hướng gặp nhất nhiều bỡ ngỡ. <a href="http://cakephp.org/">CakePHP</a> giúp tôi những bước làm quen đơn giản, cho tôi một nền tảng để xây dựng những kế hoạch tương lai gần.</p>
<p>Một hướng phát triển trong thời gian đây mà tôi quan tâm đến, khá theo định hướng của ông lớn Google, mô hình hệ thống phân tán dịch vụ đa thành phần. Tôi tạm đặt tên là như vậy. Ajax là một công nghệ, kết hợp với mô hình trên quả thực là thành bộ đôi không gì tốt hơn. Trước đây, khi định dạng dữ liệu XML giữa client-server và ngược lại được những người phát triển Ajax sử dụng rất phổ biến, nhưng từ khi xuất hiện Json, XML dần trở thành dĩ vãng bới thua kém về sự nhanh-gọn-rẻ trong sử dụng. Và từ khi Prototype hỗ trợ Json, tôi thậm chí còn không còn nghĩ đến XML nữa. Công nghệ thật thay đổi nhanh chóng.</p>
<p>Thật là may mắn, qua mấy buổi cafe với bạn, google tài liệu và cả đống sách tính bằng GB trong máy, mô hình phân tán dịch vụ đa thành phần là cốt lõi, là định hướng; CakePHP, Json và Prototype là những công cụ để tôi xây dựng hệ thống cho các sản phẩm sắp tới của mình. Tôi sẽ có những bài báo chi tiết hơn cách xây dựng, cấu hình hệ thống để những công cụ này làm việc với nhau thật hiệu quả và áp dụng mô hình hệ thống phân tán dịch vụ đa thành phần vào xây dựng hệ thống của riêng bạn như thế nào !!! Hãy đón đọc trong các kì sau</p>
<p> </p>
<p>To be continuous ...</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Developing a simple organiser using CakePHP]]></title>
<link>http://frankappiahnsiah.wordpress.com/?p=94</link>
<pubDate>Sun, 05 Oct 2008 20:02:24 +0000</pubDate>
<dc:creator>frankappiahnsiah</dc:creator>
<guid>http://frankappiahnsiah.de.wordpress.com/2008/10/05/developing-a-simple-organiser-using-cakephp/</guid>
<description><![CDATA[Introduction
CakePHP is a PHP library for RAD using design patterns like
MVC, Association Data Mappi]]></description>
<content:encoded><![CDATA[<p><strong>Introduction</strong><br />
CakePHP is a PHP library for RAD using design patterns like<br />
MVC, Association Data Mapping like Hibernate,JPA etc.<br />
The organiser will consist of four basic functionality:<br />
Notes, Tasks, Contacts and Appointments.Lets get organise now.</p>
<p>To follow the tutorial,you need the following software and resources.<br />
1.<a href="http://www.netbeans.org">Netbeans IDE ver 6.5-  PHP module</a><br />
2.<a href="http://www.sun.com/downloads">JDK version 6 or 5 </a><br />
3.<a href="http://www.sun.com/downloads">MySQL version 5.0 </a><br />
4.<a href="http://www.apachefriends.org/en/xampp-windows.html#646">Xampplite</a><br />
5.<a href="http://www.cakephp.org">CakePHP</a></p>
<p><em>Setting up the resources downloaded</em><br />
Install all the executables except CakePHP.<br />
For more information on how to set up netbeans visit  (www.netbeans.org)</p>
<p><strong>Creating a PHP project with the IDE</strong></p>
<p>1.Select File&#62;New Project... ,PHP &#62;PHP Application</p>
<p><a href="http://frankappiahnsiah.wordpress.com/files/2008/10/step1.jpg"><img class="alignnone size-full wp-image-96" title="step1" src="http://frankappiahnsiah.wordpress.com/files/2008/10/step1.jpg" alt="" width="346" height="183" /></a></p>
<p>Click Next.<br />
2. Set the<br />
Project name : Organiser<br />
Change project location to where ever<br />
<a href="http://frankappiahnsiah.wordpress.com/files/2008/10/step2.jpg"><img class="alignnone size-full wp-image-97" title="step2" src="http://frankappiahnsiah.wordpress.com/files/2008/10/step2.jpg" alt="" width="335" height="206" /></a></p>
<p>Click Next<br />
3.Run Configuration:<br />
Set -:<br />
Run As: Local Web Site (running on local web server)<br />
Check :Copy files from Sources Folder to another location.<br />
Copy to Folder : browse to the location of xampp installation and select "htdocs" folder</p>
<p><a href="http://frankappiahnsiah.wordpress.com/files/2008/10/step3.jpg"><img class="alignnone size-full wp-image-98" title="step3" src="http://frankappiahnsiah.wordpress.com/files/2008/10/step3.jpg" alt="" width="326" height="199" /></a><br />
Click Finish.</p>
<p>Setting the project up<br />
Unzip the cake_1.2.0.7692-rc3.zip<br />
Copy all the files in the unzip file to your project_directory/web<br />
<a href="http://frankappiahnsiah.wordpress.com/files/2008/10/struct.jpg"><img class="alignnone size-full wp-image-99" title="struct" src="http://frankappiahnsiah.wordpress.com/files/2008/10/struct.jpg" alt="" width="324" height="208" /></a><br />
This is the structure for most application.<br />
The project will be as shown:<br />
<a href="http://frankappiahnsiah.wordpress.com/files/2008/10/prostruct.jpg"><img class="alignnone size-full wp-image-100" title="prostruct" src="http://frankappiahnsiah.wordpress.com/files/2008/10/prostruct.jpg" alt="" width="151" height="128" /></a></p>
<p>Setting up the database for the project<br />
In the IDE,under Source Files select file "database.php.default" as shown<br />
<a href="http://frankappiahnsiah.wordpress.com/files/2008/10/dataconfig.jpg"><img class="alignnone size-full wp-image-101" title="dataconfig" src="http://frankappiahnsiah.wordpress.com/files/2008/10/dataconfig.jpg" alt="" width="188" height="181" /></a><br />
Rename the file to "database.php".<br />
Now edit the database.php file as shown<br />
<a href="http://frankappiahnsiah.wordpress.com/files/2008/10/database.jpg"><img class="alignnone size-medium wp-image-102" title="database" src="http://frankappiahnsiah.wordpress.com/files/2008/10/database.jpg?w=300" alt="" width="300" height="231" /></a></p>
<p>This is the settings i used, change to reflect yours. (login ,password ,database,host).</p>
<p><strong>Codes in the application</strong><br />
All the php source files will be placed in the structure as shown above.<br />
Take a moment and look at the struture under /app (models, views, controllers =&#62; MVC design pattern)<br />
All the models of the application will be placed under /app/models<br />
All the views of the application will be placed under /app/views<br />
All the controllers of the application will be placed under /app/controllers</p>
<p>Lets have the first cake:<br />
<em>Scripting the models</em>:<br />
<a href="http://frankappiahnsiah.wordpress.com/files/2008/10/model.jpg"><img class="alignnone size-medium wp-image-103" title="model" src="http://frankappiahnsiah.wordpress.com/files/2008/10/model.jpg?w=300" alt="" width="300" height="257" /></a><br />
The figure shows us the models we need to create.</p>
<p>Under Source Files&#62;app/models, Right click and then select New&#62; PHP file..<br />
Set the filename: task<br />
Check if the Folder is set to "web/app/models"<br />
Edit the file to reflect as shown:<br />
<a href="http://frankappiahnsiah.wordpress.com/files/2008/10/code_task.jpg"><img class="alignnone size-full wp-image-104" title="code_task" src="http://frankappiahnsiah.wordpress.com/files/2008/10/code_task.jpg" alt="" width="301" height="165" /></a></p>
<p><strong><em>N</em><em>B:</em> CakePHP has a convention used to bake the application based on the filename and class name of the models.You must follow the naming as i have done to make it work.Go to http://www.cakephp.org for more information on the conventions.</strong></p>
<p>Create the other three models as we did above.<br />
Edit appointment.php to reflect<br />
<a href="http://frankappiahnsiah.wordpress.com/files/2008/10/code_appoint.jpg"><img class="alignnone size-full wp-image-105" title="code_appoint" src="http://frankappiahnsiah.wordpress.com/files/2008/10/code_appoint.jpg" alt="" width="318" height="170" /></a><br />
Edit note.php to reflect as shown below<br />
<a href="http://frankappiahnsiah.wordpress.com/files/2008/10/code_note.jpg"><img class="alignnone size-full wp-image-106" title="code_note" src="http://frankappiahnsiah.wordpress.com/files/2008/10/code_note.jpg" alt="" width="281" height="166" /></a></p>
<p>Edit contact.php to reflect as shown below<br />
<a href="http://frankappiahnsiah.wordpress.com/files/2008/10/code_contact.jpg"><img class="alignnone size-full wp-image-107" title="code_contact" src="http://frankappiahnsiah.wordpress.com/files/2008/10/code_contact.jpg" alt="" width="327" height="169" /></a></p>
<p><strong>What just happened?</strong><br />
We just created four models to reflect our tables in the database.<br />
Each model inherits from AppModel.This is a class from CakePHP to help model the tables.<br />
Since we are following the conventions, CakePHP will get all the attributes from the tables for each model for us.</p>
<p><em>Scripting the controllers:</em><br />
Every model needs a controller and the basic CRUD will be generated at runtime for us via CakePHP scaffolds.</p>
<p>Under Source Files&#62;app&#62;controllers, Right click and select New&#62;PHP file..<br />
Set the filename: notes_controller<br />
Make sure that the folder is set to web/app/controllers<br />
Edit the file to reflect as shown below.<br />
<a href="http://frankappiahnsiah.wordpress.com/files/2008/10/notes_ctrl.jpg"><img class="alignnone size-full wp-image-108" title="notes_ctrl" src="http://frankappiahnsiah.wordpress.com/files/2008/10/notes_ctrl.jpg" alt="" width="400" height="197" /></a></p>
<p>Create the other three controllers with filenames(contacts_controller, notes_controller, appointments_controller).<br />
Edit the contacts_controller.php file to reflect as shown below<br />
<a href="http://frankappiahnsiah.wordpress.com/files/2008/10/contacts_ctrl.jpg"><img class="alignnone size-full wp-image-109" title="contacts_ctrl" src="http://frankappiahnsiah.wordpress.com/files/2008/10/contacts_ctrl.jpg" alt="" width="398" height="188" /></a><br />
Edit the appointments_controller.php file to reflect as shown below<br />
<a href="http://frankappiahnsiah.wordpress.com/files/2008/10/appoints_ctrl.jpg"><img class="alignnone size-full wp-image-110" title="appoints_ctrl" src="http://frankappiahnsiah.wordpress.com/files/2008/10/appoints_ctrl.jpg" alt="" width="424" height="184" /></a><br />
Edit the tasks_controller.php file to reflect as shown below<br />
<a href="http://frankappiahnsiah.wordpress.com/files/2008/10/tasts_ctrl.jpg"><img class="alignnone size-full wp-image-111" title="tasts_ctrl" src="http://frankappiahnsiah.wordpress.com/files/2008/10/tasts_ctrl.jpg" alt="" width="384" height="183" /></a></p>
<p><strong>What just happened?</strong><br />
We just created four controllers to manage and control our models.Open any of the controller files<br />
,you realise there are no methods.You only see two variables.<br />
<strong>var $name='Appointments'</strong> for the appointment controller.<br />
<strong>var $scaffold;</strong><br />
The variable declare above does the trick. This informs CakePHP that we want a basic CRUD operation and so should take care of it for us.<br />
What CakePHP does is to bake a read, create, update, and delete operation for all the models that have the variable $scaffold declare.What we get is a well bake cake ready to be eaten.</p>
<p><strong>Testing </strong><br />
Open your browser and Enter this url : <strong>http:localhost/Organiser/contacts</strong><br />
<a href="http://frankappiahnsiah.wordpress.com/files/2008/10/view_contacts.jpg"><img class="alignnone size-medium wp-image-112" title="view_contacts" src="http://frankappiahnsiah.wordpress.com/files/2008/10/view_contacts.jpg?w=300" alt="" width="300" height="191" /></a><br />
You will notice that the page has "CakePHP : The rapis application development" header.</p>
<p><strong>Adding a home page for the application</strong><br />
Create an empty file with filename home.ctp into app/views/pages.That is where pages without controllers are kept.<br />
Edit to as show below:</p>
<p><a href="http://frankappiahnsiah.wordpress.com/files/2008/10/home_page.jpg"><img class="alignnone size-full wp-image-113" title="home_page" src="http://frankappiahnsiah.wordpress.com/files/2008/10/home_page.jpg" alt="" width="499" height="262" /></a></p>
<p><strong>Changng the default layout</strong><br />
Create an empty file with filename default.ctp into app/views/layouts.<br />
Edit the file to reflect:</p>
<p><a href="http://frankappiahnsiah.wordpress.com/files/2008/10/default_lay.jpg"><img class="alignnone size-medium wp-image-115" title="default_lay" src="http://frankappiahnsiah.wordpress.com/files/2008/10/default_lay.jpg?w=300" alt="" width="300" height="224" /></a></p>
<p><strong>Add a css to help in laying out the pages well.</strong><br />
Get the file <a href="http://frankappiahnsiah.wordpress.com/files/2008/10/stylesheet.doc">stylesheet</a> and create a css file with name stylesheet into folder /app/webroot/css.</p>
<p><strong>Running the final project</strong><br />
After all this alteration the final page.<br />
<a href="http://frankappiahnsiah.wordpress.com/files/2008/10/final_out1.jpg"><img class="alignnone size-medium wp-image-117" title="final_out1" src="http://frankappiahnsiah.wordpress.com/files/2008/10/final_out1.jpg?w=300" alt="" width="300" height="216" /></a></p>
<p><strong>Summary</strong></p>
<p>We just created a simple organiser in a short time.</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Sharing CakePHP session with another app]]></title>
<link>http://teknoid.wordpress.com/?p=286</link>
<pubDate>Sun, 05 Oct 2008 15:15:10 +0000</pubDate>
<dc:creator>teknoid</dc:creator>
<guid>http://teknoid.de.wordpress.com/2008/10/05/sharing-cakephp-session-with-another-app/</guid>
<description><![CDATA[This question pops up once in a while: &#8220;How do I share session data with a third-party applica]]></description>
<content:encoded><![CDATA[<p>This question pops up once in a while: "How do I share session data with a third-party application?"</p>
<p>Thankfully the answer is pretty simple, just make sure that the session (cookie) name is the same for both apps.<br />
In CakePHP it's set in the core.php... Configure::write('Session.cookie', 'CAKEPHP');</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[PHP5 and tiny foreach() improvement]]></title>
<link>http://teknoid.wordpress.com/?p=283</link>
<pubDate>Fri, 03 Oct 2008 15:45:56 +0000</pubDate>
<dc:creator>teknoid</dc:creator>
<guid>http://teknoid.de.wordpress.com/2008/10/03/php5-and-tiny-foreach-improvement/</guid>
<description><![CDATA[While this issue is certainly not specific to CakePHP, I felt it was worthwhile to point out since w]]></description>
<content:encoded><![CDATA[<p>While this issue is certainly not specific to CakePHP, I felt it was worthwhile to point out since we are often dealing with data arrays and foreach() loops to modify that data.</p>
<p>Consider the following example:</p>
<p>[sourcecode language="php"]<br />
function afterFind($results, $primary=false) {<br />
    	if($primary == true) {<br />
    	  foreach($results as $key => $value) {<br />
    	      $results[$key][$this->alias]['my_field'] = $this->modifyField($value[$this->alias]['my_field']);<br />
    	  }<br />
    	}	</p>
<p>    	return $results;<br />
}<br />
[/sourcecode]</p>
<p>While this works just fine for most cases, the main issue is that $value in the above example is actually a copy of the array's content. </p>
<p>In PHP5 we have the option to reference the array elements of $results, by using: "$results as &#38;$value". </p>
<p>So the modified code for PHP5 would look like:</p>
<p>[sourcecode language="php"]<br />
function afterFind($results, $primary=false) {<br />
    	if($primary == true) {<br />
    	  foreach($results as &$value) {<br />
    	      $value[$this->alias]['my_field'] = $this->modifyField($value[$this->alias]['my_field']);<br />
    	  }<br />
    	}<br />
    	unset($value);	</p>
<p>        return $results;<br />
}<br />
[/sourcecode]</p>
<p>The obvious improvement is that we are not creating any extra copies of our data. Sure, it may not cause any serious issues, but if making additional copies of the data can be easily avoided it probably should be. Secondly, it makes the code cleaner and more concise, which is always a good thing.</p>
<p>P.S. It is always a good idea to unset() the reference in case any further processing might accidentally change the value of our $results array.</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[A few words about media views (sending binary files to the user)]]></title>
<link>http://teknoid.wordpress.com/?p=276</link>
<pubDate>Thu, 02 Oct 2008 16:00:09 +0000</pubDate>
<dc:creator>teknoid</dc:creator>
<guid>http://teknoid.de.wordpress.com/2008/10/02/a-few-words-about-media-views-sending-binary-files-to-the-user/</guid>
<description><![CDATA[Media views is one really nice feature of CakePHP which doesn&#8217;t get much attention, so I figur]]></description>
<content:encoded><![CDATA[<p>Media views is one really nice feature of CakePHP which doesn't get much attention, so I figured to briefly cover it here. Actually the manual lists pretty much all you need to know about media views, but there are a couple of things that I'd like to point out. First, take a  look at the brief example and more detailed explanation here: <a href="http://book.cakephp.org/view/489/Media-Views">http://book.cakephp.org/view/489/Media-Views</a></p>
<p>One might ask what's the point of using 'id' and 'name'? Well, the 'name' key allows you to change the file name as it will be displayed to the user (in a "save" dialog, for example), it is not the actual name of the file on the server or at least it doesn't have to be. For example, if you have a reporting tool that generates some files and their name on the server happens to be 329569364658875.zip, you can modify such ugly name on the fly by specifying 'name' =&#62; 'user_friendly_file_name'.</p>
<p>Also, remember that 'path' is relative to your app directory and requires a trailing DS (directory separator). Therefore if you have a path like /home/bob/cake/app/files_for_download, you specify:<br />
'path'=&#62;'files_for_download'.DS</p>
<p>And just to reiterate what the manual says, media views allow you to perform authentication before delivering content and you can deliver files which are not accessible from webroot to prevent direct linking.</p>
<p>P.S. Thanks to skiedr and Tarique Sani who've pointed out that you can now cache the files generated by media views, which ultimately means that images, etc. can be fetched from the browser cache if available. </p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[CakePHP Access Control Alphabet Soup]]></title>
<link>http://iamcam.wordpress.com/?p=125</link>
<pubDate>Tue, 30 Sep 2008 23:34:19 +0000</pubDate>
<dc:creator>Cameron Perry</dc:creator>
<guid>http://iamcam.de.wordpress.com/2008/09/30/cakephp-access-control-alphabet-soup/</guid>
<description><![CDATA[Reading through a few of my most recent posts, you&#8217;ll quickly learn that I&#8217;m learning Ca]]></description>
<content:encoded><![CDATA[<p>Reading through a few of my most recent posts, you'll quickly learn that I'm learning CakePHP as my PHP framework of choice. So far, so good. Actually, it's pretty good, but that is not without some questions I've had along the way. I'm probably getting stuck more than I should on best practice coding, but I like to do it the right way, not necessarily the easiest way (read: hacks).</p>
<p>Among some of my initial stumbling blocks has been working through the idea of access control from the framework viewpoint. I "get it" when it comes to writing my own code, like in the revealCMS, and I "get it" in the context of certain "things" (usually users) needing access to specific things (often controllers and actions). The hard part is sorting out where to even start with all the alphabet soup: Auth, Acl, Aro, Aco, etc etc etc. How do you even get to a point where you have a simple working prototype to expand on?</p>
<p>Apparently there are numerous examples and tutorials of how to get started with Cake Acl, however I find many of them to be over-complicated or thorough. In other cases some are simply too terse. There is a fine line between terseness and conciseness. Even the CakePHP docs leave much to be desired for newer users: the official Acl documentation is long and kind-of confusing, and the sample application tutorial (also part of the official docs) seems to do things differently than explained in the primary documentation - a considerable problem, in my opinion. Yes, I do realize that the concept of Acl really depends on your application, but shouldn't documentation at least be consistent? The one saving grace, however, is that the Bakery has a few examples, which brings me to my next point.</p>
<p>I found a tutorial I actually like so far. By "so far," I mean I haven't finished it yet, but to this point I've gotten more done than most articles have gotten me in just setting up the Acl... and it's not all that difficult. It's Ketan's <a title="How to use Acl with Cake PHP 1.2.x?" href="http://bakery.cakephp.org/articles/view/how-to-use-acl-in-1-2-x" target="_blank"><em>How to use Acl with Cake PHP 1.2.x?*</em></a> No dobut some of you will stumble across this post here, and hopefully find it useful. I think once the dust settles on the first step, you(we) will be able to look at some of the other tutorials and adapt them to our own specific needs.</p>
<p>I'll try to keep this post updated with additonal solutions as I find them.</p>
<p>* There ARE some typos in the example code, so be aware of that and make modifications as necessary.</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Dealing with calculated fields in CakePHP's find()]]></title>
<link>http://teknoid.wordpress.com/?p=265</link>
<pubDate>Mon, 29 Sep 2008 22:10:45 +0000</pubDate>
<dc:creator>teknoid</dc:creator>
<guid>http://teknoid.de.wordpress.com/2008/09/29/dealing-with-calculated-fields-in-cakephps-find/</guid>
<description><![CDATA[Let&#8217;s say we&#8217;ve got some calculated field in our find() method, something like SUM() or ]]></description>
<content:encoded><![CDATA[<p>Let's say we've got some calculated field in our find() method, something like SUM() or COUNT() or maybe AVG().</p>
<p>For the sake of example let's do something simplistic, like:</p>
<p>[sourcecode language="php"]<br />
pr($this->Company->find('all', array('fields'=>array('Company.id','Company.name', 'COUNT(id) AS total_count'),<br />
		                                     'group'=>array('Company.name'),<br />
		                                     'recursive'=>-1)));<br />
[/sourcecode]</p>
<p>This is all fine and well, except our total_count field does not appear with the rest of the fields in the resulting data array, but rather in it's own index, like here:</p>
<p>[sourcecode language="php"]<br />
Array<br />
(<br />
    [0] => Array<br />
        (<br />
            [Company] => Array<br />
                (<br />
                    [id] => 1<br />
                    [name] => New Company<br />
                )</p>
<p>            [0] => Array<br />
                (<br />
                    [total_count] => 1<br />
                )</p>
<p>        )<br />
[/sourcecode]</p>
<p>We can use Set::check() and easily reformat our array in afterFind(), so that we can reference all fields in a consistent manner. </p>
<p>Try something like this in your model (or app model):</p>
<p>[sourcecode language="php"]<br />
function afterFind($results, $primary=false) {<br />
    	if($primary == true) {<br />
    	   if(Set::check($results, '0.0')) {<br />
    	      $fieldName = key($results[0][0]);<br />
    	       foreach($results as $key=>$value) {<br />
    	          $results[$key][$this->alias][$fieldName] = $value[0][$fieldName];<br />
    	          unset($results[$key][0]);<br />
    	       }<br />
    	    }<br />
    	}	</p>
<p>    	return $results;<br />
}<br />
[/sourcecode]</p>
<p>Now all fields appear where we would expect them.<br />
Referencing all fields in a consistent manner (in the view, for example) is already a good enough benefit to use an approach similar to this one, but in addition if the change is ever made to the core in order to fix this up, your code will not be affected in any way.</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[php frameworks - my opinion]]></title>
<link>http://momgeek.wordpress.com/?p=51</link>
<pubDate>Fri, 26 Sep 2008 18:41:29 +0000</pubDate>
<dc:creator>fast times at sweet valley high</dc:creator>
<guid>http://momgeek.de.wordpress.com/2008/09/26/php-frameworks-my-opinion/</guid>
<description><![CDATA[I heart PHP. I&#8217;ve been working with it in one form or another for over 8 years &#8212; back in]]></description>
<content:encoded><![CDATA[<p>I heart PHP. I've been working with it in one form or another for over 8 years -- back in the PHP 3 days, even! I'm entirely self-taught, relying on php.net and tutorials to help me figure out how to do stuff.</p>
<p>Last fall I was working on a niche-oriented CMS and was getting majorly bored/burned out by all the procedural stuff; the code felt horribly messy to me and I wanted to get into OOP (Object Oriented Programming) but previous attempts had left me scratching my head.</p>
<p>Somehow I stumbled on CodeIgniter and I was immediately hooked. Once I figured out my way around MVC and their way of doing things I tripled the amount of code I was able to put out. Was my code the best you could ever find? No, but it was definitely a step ahead of where I'd been.</p>
<p>Once I finished the CMS I decided to tackle another project and turned again to CI. I've been working on this project for the majority of 2008, and might have it done by the end of the year.</p>
<p>Now, I really love CI because it's so easy and flexible, and it's pretty much agreed that they have the easiest to understand documentation. However, I began to get frustrated with some of the features the default CI lacks - Auth being the biggest -- so I started "shopping around" some other popular frameworks. Following are the ones I dabbled with. Note that there are no benchmarks because frankly that wasn't my concern -- realtive ease of use and the speeding up of my development were the primary concerns was.</p>
<p><strong>Zend Framework - <a href="http://framework.zend.com" target="_blank">http://framework.zend.com</a>:</strong><br />
Impression: After Symfony, I say ZF is probably the daddy of the frameworks. You can develop some really powerful stuff with it. That said, I found it to have a really steep learning curve and to be too loosely coupled for my taste. Requires more manual configuration than most other frameworks. It took me almost a full day to figure out the Zend_Db class and even then I wasn't able to move too far with it. I was really impressed with their ACL and Auth classes, although I didn't get far enough to really dabble with them.<br />
Conclusion: If I had more time to play with it, I'm sure I could figure ZF out and develop some really cool stuff. For now, I will most likely stick with implementing components of ZF with other frameworks.</p>
<p><strong>CakePHP - <a href="http://www.cakephp.org" target="_blank">http://www.cakephp.org</a></strong><br />
Impression: One of the most popular frameworks. Pretty strict with naming conventions. Models are a must (this is not a bad thing). I actually played with this for a couple of days and got a lot farther with it than I did with ZF. The docs (2.2) are pretty good and I was able to find almost everything I needed to know within them. Because it's so popular, finding things that weren't in the docs -- like a form tutorial -- was really easy.</p>
<p>Conclusion: I may go back and try my hand developing something with Cake. If you have moderate experience with MVC, it's not (IMO) that hard to learn. It's a lot slower than pretty much any other framework but it also does a lot of stuff for you that could speed up your production.</p>
<p><strong>KohanaPHP - <a href="http://www.kohanaphp.com" target="_blank">http://www.kohanaphp.com</a></strong><br />
Impression: Kohana is a relative newcomer to the PHP Framework scene; it originated as a fork of CI when a bunch of CI developers got tired of waiting for EllisLab (creators of CI) to fix bugs with CI. Right now the current release is 2.2 (I think) and while a lot of things are different from CI, it's still feasible to port CI apps to Kohana by renaming a few things and following some different rules, like using helper::helper_function instead of $this-&#62;load-&#62;helper('helper') and helper_function(). I wasn't very impressed with their docs; I found reference to the "Forge" class, that helps consolidate form creating/validation rules, only to find out Forge has been depreceated in Kohana 2.2.<br />
However, Kohana does seem very powerful and I don't think it would be too big of a leap to go from CI to Kohana. I really like that they have an advanced archive class as well as auth and payment modules.</p>
<p>Conclusion: I will probably use Kohana at some point; I may even recode the 2nd draft of my current project in Kohana since it provides more built-in functionality than CI does. I really like that it is community based; however, from what I've read the framework seems to depreceate things fairly often, which could make developing with it a pain in the ass.</p>
<p><strong>CodeIgniter - <a href="http://www.codeigniter.com" target="_blank">http://www.codeigniter.com</a></strong><br />
Impression: As I said, I love CI. It was so easy to learn and really helped speed up my PHP production. The community is awesome, the docs are awesome, and it's so flexible I can do pretty much anything I want with it. The "bare-bones-ness" of it, though, is also frustrating at times, especially when I have to manually code something in that the other frameworks provide by default -- again, mainly Auth stuff. I think it's kind of neat that it's used and backed by a company (EllisLab, which produces the Expression Engine commercial CMS), which should provide security as far as it being around. The bad thing about that is that since it's developed and maintained by a company, fixes to bugs and other issues can take a lot longer than a community driven framework. I'd really like to see CI get into module-type stuff or at least include company-supported libraries like auth and payment.</p>
<p>Conclusion: I will likely stay with CI for now; when I get more time to dabble with Kohana more it will become more of a competition in my mind. I have to say, though, that for each (hee!) framework I tried, I ended up going back to CI with relief mostly for its flexibility. That could just be due to my being most familiar with CI, though.</p>
<p>To wrap it up, my choices would likely go like so:</p>
<ol>
<li>CodeIgniter</li>
<li>Kohana</li>
<li>CakePHP</li>
<li>Zend Framework</li>
</ol>
<p>I know that this hasn't been a very "techy" type of comparison; as the title suggests, these are merely my opinions on the 4 frameworks I've tried out. Eveyrone has one that clicks for them, and you're definitely entitled to use that one and call it the best (for you!).</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[voyage through the wonderful world of PHP MVC]]></title>
<link>http://ederscubicle.wordpress.com/?p=49</link>
<pubDate>Thu, 25 Sep 2008 21:40:10 +0000</pubDate>
<dc:creator>El Chido</dc:creator>
<guid>http://ederscubicle.de.wordpress.com/2008/09/25/voyage-through-the-wonderful-world-of-php-mvc/</guid>
<description><![CDATA[You guys know that I&#8217;ve been working with ASP.NET lately and a CMS called DotNetNuke. While i]]></description>
<content:encoded><![CDATA[<p>You guys know that I've been working with <a title="ASP.NEt" href="http://msdn.microsoft.com/en-us/asp.net/default.aspx" target="_blank">ASP.NET</a> lately and a CMS called <a title="DotNetNuke" href="http://www.dotnetnuke.com" target="_blank">DotNetNuke</a>. While it's cool and all I really want to go back to my first love: <a title="Hypertext Preprocessor" href="http://www.php.net" target="_blank">PHP</a>. I've been looking around trying to find something similar. I thought about learning how to write modules with <a title="Drupal" href="http://www.drupal.org" target="_blank">Drupal</a>. But I really want to write the software the way I've learned how to do it with <a title="DotNetNuke" href="http://www.dotnetnuke.com" target="_blank">DotNetNuke</a>, with the <a title="Model-View-Controller" href="http://en.wikipedia.org/wiki/Model-view-controller" target="_blank">MVC</a> philosophy. Model-View-Controller is a software architectural pattern that tries to make it easier to write and maintain code by separating your data access code and business logic from the UI code. Keeps everything neat. If you've ever heard of <a title="Ruby on Rails" href="http://www.rubyonrails.org/" target="_blank">Ruby on Rails</a> you know what I am talking about. </p>
<p>I tried <a href="http://cakephp.org/" target="_blank">CakePHP</a> but it was a little too rigid on its rules when it came to the data access layer, not enough flexibility. I don't like frameworks that box you in trying to get you to do things a certain way. I want a certain amount of freedom when I code. I've been reading lately about <a title="CodeIgniter" href="http://codeigniter.com/" target="_blank">CodeIgniter</a> which is a very lightweight MVC framework that gives you that freedom (from what I've read). So I will be trying it in the next couple of weeks.</p>
<p>I think that in the long run I'd like to be able to make <a title="Drupal" href="http://www.drupal.org" target="_blank">Drupal</a> modules and build applications on it. Besides, there is a crazy amount of people out there using <a title="Drupal" href="http://www.drupal.org" target="_blank">Drupal</a> for their portals, ecommerce, and other sites. All of those will need maintenance at some point and I will be ready to dive in if I ever get a contract like that. But if I ever want to write something from scratch I am going to use a framework like <a title="CodeIgniter" href="http://codeigniter.com/" target="_blank">CodeIgniter</a>. That way I have the best of both worlds.</p>
<p>I will update the blog as I learn more about both platforms...</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Saving extra fields in the join table (for HABTM models)]]></title>
<link>http://teknoid.wordpress.com/?p=253</link>
<pubDate>Wed, 24 Sep 2008 19:35:58 +0000</pubDate>
<dc:creator>teknoid</dc:creator>
<guid>http://teknoid.de.wordpress.com/2008/09/24/saving-extra-fields-in-the-join-table-for-habtm-models/</guid>
<description><![CDATA[An interesting question came up on IRC today, which essentially boils down to:
&#8220;How to save ex]]></description>
<content:encoded><![CDATA[<p>An interesting question came up on IRC today, which essentially boils down to:<br />
"How to save extra fields in the join table, for HABTM models?"</p>
<p>I've seen this question float around here and there, but do not recall any specific solutions...</p>
<p>So here, I propose one method which requires a temporary hasMany bind between the model which we are saving and the join table model, then using saveAll() to save the data. </p>
<p>Let's take a look at an example, where we have the good ol' Post HABTM Tag. </p>
<p>We are trying to save a new Post, for which we already know a Tag.id (a pretty standard HABTM save scenario), but now we also need to save an extra field 'status' into our join table.</p>
<p>[sourcecode language="php"]<br />
$this->data['PostsTag'][0]['tag_id'] = 15;<br />
$this->data['PostsTag'][0]['status'] = 'disabled';</p>
<p>$this->Post->bindModel(array('hasMany'=>array('PostsTag')));<br />
$this->Post->saveAll($this->data);<br />
[/sourcecode]</p>
<p>And that's all there is to it, we've now saved our Post as well as our relation to Tag and the required extra field. Of course, in reality, your data will come from the form, but hopefully you get the gist of this idea.</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[SELECT ... AS ... in CakePHP 1.2]]></title>
<link>http://teknoid.wordpress.com/?p=250</link>
<pubDate>Wed, 24 Sep 2008 14:25:13 +0000</pubDate>
<dc:creator>teknoid</dc:creator>
<guid>http://teknoid.de.wordpress.com/2008/09/24/select-as-in-cakephp-12/</guid>
<description><![CDATA[This is a simple hint, but hopefully will be useful to some&#8230;
You might have noticed some examp]]></description>
<content:encoded><![CDATA[<p>This is a simple hint, but hopefully will be useful to some...</p>
<p>You might have noticed some examples where you have:</p>
<p>[sourcecode language="php"]<br />
$this->Profile->find('all', array('fields'=>array('SUM(Profile.votes) AS total_votes')));<br />
[/sourcecode]</p>
<p>But what if you simply needed Profile.field AS another_name?<br />
'fields'=&#62;array('Profile.field AS another_name') ... isn't going to work, just like that.</p>
<p>What you need to do is escape the fields in your 'fields' array, like so:</p>
<p>[sourcecode language="php"]<br />
$this->Profile->find('all', array('fields'=>array('`Profile`.`name` AS `another_name`')));<br />
[/sourcecode]</p>
<p>(Note the backticks)</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[PHP framework usage]]></title>
<link>http://hmvrulz.wordpress.com/?p=78</link>
<pubDate>Tue, 23 Sep 2008 09:49:34 +0000</pubDate>
<dc:creator>hmvrulz</dc:creator>
<guid>http://hmvrulz.de.wordpress.com/2008/09/23/php-framework-usage/</guid>
<description><![CDATA[
]]></description>
<content:encoded><![CDATA[<p><a href="http://img225.imageshack.us/img225/2033/googletrendssymfonyzendbq4.jpg"><img src="http://img225.imageshack.us/img225/2033/googletrendssymfonyzendbq4.jpg" alt="compare" /></a></p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Useful Stuff in CakePHP]]></title>
<link>http://akiiiiii.wordpress.com/?p=6</link>
<pubDate>Tue, 23 Sep 2008 09:01:57 +0000</pubDate>
<dc:creator>akiiiiii</dc:creator>
<guid>http://akiiiiii.de.wordpress.com/2008/09/23/logging-stuff-in-cakephp/</guid>
<description><![CDATA[Getting Auth userdata
$this-&gt;Auth-&gt;user()
Logging events
$this-&gt;log(&#8217;==&gt;bla bla]]></description>
<content:encoded><![CDATA[<p><strong>Getting Auth userdata</strong></p>
<p>$this-&#62;Auth-&#62;user()</p>
<p><strong>Logging events</strong></p>
<p>$this-&#62;log('==&#62;bla bla&#60;==',LOG_DEBUG);</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Food for thought: $this-&gt;redirect() vs $this-&gt;render()]]></title>
<link>http://teknoid.wordpress.com/?p=242</link>
<pubDate>Mon, 22 Sep 2008 22:24:34 +0000</pubDate>
<dc:creator>teknoid</dc:creator>
<guid>http://teknoid.de.wordpress.com/2008/09/22/food-for-thought-this-redirect-vs-this-render/</guid>
<description><![CDATA[One example, that we often see, is something along the following lines in the controller:


if($this]]></description>
<content:encoded><![CDATA[<p>One example, that we often see, is something along the following lines in the controller:</p>
<p>[sourcecode language="php"]</p>
<p>if($this->User->save($this->data)) {<br />
  $this->Session->setFlash(... some stuff for the view ... );<br />
  $this->redirect(array('action'=>'success'));<br />
}<br />
[/sourcecode]</p>
<p>If all we are doing is displaying a "success" page back to the user, do we really need to bother with a redirect()?</p>
<p>To me it seems a little easier to do: </p>
<p>[sourcecode language="php"]</p>
<p>if($this->User->save($this->data)) {<br />
  $this->set('arrayOfMessages', $myPreviouslyPreparedArrayOfMessages);<br />
  $this->render('success');<br />
}</p>
<p>[/sourcecode]</p>
<p>Not really a big deal one way or another, but something to consider (especially for those very high traffic servers ;)). </p>
<p>P.S. As some readers pointed out, the obvious draw back is that $this-&#62;render() will cause the data re-submit prompts when refreshing or going back in the browser.</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Set::merge() and dynamic validation rules]]></title>
<link>http://teknoid.wordpress.com/?p=240</link>
<pubDate>Mon, 22 Sep 2008 21:37:30 +0000</pubDate>
<dc:creator>teknoid</dc:creator>
<guid>http://teknoid.de.wordpress.com/2008/09/22/setmerge-and-dynamic-validation-rules/</guid>
<description><![CDATA[Here&#8217;s another trick with Set::merge()&#8230;
Let&#8217;s say we&#8217;ve defined some basic v]]></description>
<content:encoded><![CDATA[<p>Here's another trick with Set::merge()...</p>
<p>Let's say we've defined some basic validation rules in our Profile model, something like: </p>
<p>[sourcecode language="php"]<br />
var $validate = array (<br />
   'name' => array(<br />
      'rule' => array('notEmpty'),<br />
      'required' => false,<br />
      'message' => 'Please enter a name'<br />
     )</p>
<p>  .... and so on for all other fields ...</p>
<p>);<br />
[/sourcecode]</p>
<p>Now we've got an action where this particular set of rules isn't going to fly... </p>
<p>Maybe the data is coming from an external (somewhat untrusted) source and in this case we need to make sure that the 'name' is present in the data array (i.e. 'required'=&#62;true) and that it's not only 'notEmpty', but now it has to be 'alphaNumeric'.</p>
<p>So we do an easy "update" to our default rules, which we've previously defined in the model:</p>
<p>[sourcecode language="php"]</p>
<p>$this->Profile->validate = Set::merge($this->Profile->validate, array(<br />
      'name'=>array(<br />
         'required'=>true,<br />
         'rule'=>array('alphaNumeric')<br />
      )<br />
));</p>
<p>[/sourcecode]</p>
<p>What happened is that now all our default rules remain as we have defined them in the model, but the 'name' field is now going to be validated using this new set of rules.</p>
<p>The theory is that you set your $validate array with some default rules that will apply in most of the situations, and use this technique when your validation rules have to change for a few fields in any given action.</p>
<p>To make things even cleaner you should probably add a method to AppModel called something like modifyValidate, and then you could use:</p>
<p>$this-&#62;Profile-&#62;modifyValidate(... array of new rules...);</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[PHP tan fácil como bailar :-)]]></title>
<link>http://trescuartos.wordpress.com/?p=14</link>
<pubDate>Mon, 22 Sep 2008 05:53:14 +0000</pubDate>
<dc:creator>sonycrocket</dc:creator>
<guid>http://trescuartos.de.wordpress.com/2008/09/22/php-tan-facil-como-bailar/</guid>
<description><![CDATA[PHP tan fácil como bailar&#8230; Cumbia ? o.. Kumbia ?  
Software Libre en Español
Kumbia es un we]]></description>
<content:encoded><![CDATA[<p>PHP tan fácil como bailar... Cumbia ? o.. Kumbia ? ;-)</p>
[caption id="attachment_15" align="aligncenter" width="318" caption="Software Libre en Español"]<a href="http://trescuartos.wordpress.com/files/2008/09/kumbia-assembla.jpg"><img class="size-full wp-image-15" title="kumbia-assembla" src="http://trescuartos.wordpress.com/files/2008/09/kumbia-assembla.jpg" alt="kumbia" width="318" height="88" /></a>[/caption]
<p><strong>Kumbia</strong> es un web framework libre escrito en <strong>PHP5</strong>. Basado en las mejores prácticas de desarrollo web, usado en software comercial y educativo, Kumbia fomenta la velocidad y eficiencia en la creación y mantenimiento de aplicaciones web, reemplazando tareas de codificación repetitivas por poder, control y placer.</p>
<p>Sus principales características son:</p>
<ul>
<li>Sistema de Plantillas sencillo</li>
<li>Administración de Cache</li>
<li>Scaffolding Avanzado</li>
<li>Modelo de Objetos y Separación MVC</li>
<li>Soporte para AJAX</li>
<li>Generación de Formularios</li>
<li>Componentes Gráficos</li>
<li>Seguridad</li>
</ul>
<p>y muchas cosas más.</p>
<p>Adicional a esto Kumbia integra lo mejor de la Web en un solo framework para producir las aplicaciones Web del mañana (prototypejs, phpMailer, Smarty, FPDF, Script.aculo.us)</p>
<p>Kumbia puede ser la solución que estabas esperando!</p>
<p>Lo mas importante de todo es que Kumbia está 100% en español, recomendado para proyectos medianos o grandes, preferentemente que lleven mas de 10 páginas dinámicas</p>
<p><a href="http://www.kumbiaphp.com">Sitio web Kumbia</a></p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Let me show some work then - Interlude]]></title>
<link>http://rafaelbandeira3.wordpress.com/?p=92</link>
<pubDate>Sun, 21 Sep 2008 03:45:13 +0000</pubDate>
<dc:creator>rafaelbandeira3</dc:creator>
<guid>http://rafaelbandeira3.de.wordpress.com/2008/09/21/let-me-show-some-work-then-interlude/</guid>
<description><![CDATA[Managing to write a little bit on the way I planned and implemented all the
somewhat peculiar way th]]></description>
<content:encoded><![CDATA[<p>Managing to write a little bit on the way I planned and implemented all the<br />
somewhat peculiar way the view layer acts in the project I'm currently assigned to<br />
in my company, I'm going to introduce some practices and code standards I follow<br />
so you can get used to some ways I do code - and also give you the feeling of using it, if maybe you like and want to use any.</p>
<h2>Overhead means maintainability</h2>
<p>Everytime you can use php to spit your html, do it.<br />
You'll face performance issues with the overhead, but<br />
will gain with the no open-close of php process tags.</p>
<pre><code>
&#60;?php
echo $html-&#62;link('index', array('action' =&#62; 'index'), array(
	'class' =&#62; 'icon'
	,'id' =&#62; 'index-button'
	,'rel' =&#62; 'content index'
));
echo $html-&#62;link('quit', array('action' =&#62; 'logout'), array(
	'class' =&#62; 'icon'
	,'id' =&#62; 'logout-button'
));
?&#62;
</code></pre>
<h2>Echo usage</h2>
<p>Php's <strong>echo</strong>, as any other function, causes <em>overhead</em> and slows your app down<br />
every time you use it - read "it let's my app more beautiful", I don't care about overhead,<br />
so, only one call per block:</p>
<pre><code>
&#60;?php echo
$html-&#62;link('index', array('action' =&#62; 'index'), array(
	'class' =&#62; 'icon'
	,'id' =&#62; 'index-button'
	,'rel' =&#62; 'content index'
))
,$html-&#62;link('quit', array('action' =&#62; 'logout'), array(
	'class' =&#62; 'icon'
	,'id' =&#62; 'logout-button'
));
?&#62;
</code></pre>
<p>Noticed the comma? <strong>echo</strong> will print every passed arg,<br />
so no need for concatenation. That's the next topic.</p>
<h2>No concatenation</h2>
<p>I don't like it and I'll try hard not to use it. I prefer working with joins and arrays<br />
than concatenating words, it's cleaner, it's beatiful. <em> - my blog, my opinion.</em></p>
<pre><code>
&#60;?php echo
$html-&#62;link($fooAction, array('action' =&#62; $fooAction), array(
	'class' =&#62; join(' ', array($fooAction, $markerType, 'custom-link'))
	,'id' =&#62; $fooAction . '-marker'
))
?&#62;
</code></pre>
<p>For the wonderers: why not to use doulbe-quotes? read next.</p>
<h2>No var on strings</h2>
<p>It's all about performance. No it's not. It does increases performance, it's<br />
true, but it's not what bothers me. Vars on strings are not readable, not every<br />
IDE recognizes them, and ... they are somewhat ugly.</p>
<p>There are various ways to suppress them, the join-array show above is one,<br />
but the way I'm more likely to use is using sprintf(),<br />
because I really think it's more readable and maintainable:</p>
<pre><code>
&#60;?php echo
sprintf('%s says: %s. from %s. in %s', $person, $comment, $device, $date)
?&#62;
</code></pre>
<h2>Stick to the core</h2>
<p>All and all, you're using the framework for your freaking awesome app<br />
because, knowing or not, you do trust people who codes it. They probably<br />
code better than you, and better than people who's using their code.</p>
<p>So, using an auth plugin? pimping your own solution for already known<br />
issues or work's forme? grabbing 'fourth' party code to handle your XML?</p>
<p>No. Stick to the core. You'll be dealing with full-featured code, supported<br />
standards, community friendly solutions, revised and maintained issues and<br />
hardcore coders work.</p>
<h2>Inheritance is your friend</h2>
<p>Asked for a feature and framework devs denied, or are too busy with<br />
bugs, or are just not having enough time? Wanting a easier way of<br />
accomplish tasks your app need?</p>
<p>Stop crying and abuse of inheritance. Extend everything you think<br />
doesn't fit your app needings.</p>
<p>- A side note for the ones that plan to follow this: Keep in mind that changing class' methods context,<br />
usage and behavior are not SO "good design" as it CAN mess with your code<br />
readability.</p>
<pre><code>
App::import('Component', 'Email');
class AppEmailComponent extends EmailComponent {
	function addReceivers($receivers, $type = 'cc') {
		[... your nifty code ...]
	}

	function attach($file, $alias = null) {
		[... your nifty code ...]
	}

	function send($content = null, $template = null, $layout = null) {
	    if($content === true) {
	        [... do stuff ...]
	    }

	    return parent::send($content, $template, $layout);
	}
}
</code></pre>
<h2>It's not yours, it belongs to the App</h2>
<p>No MyHelper, MyHtml, MyForm... it's not yours, not mine, not PL's or Bosse's.<br />
It belongs to the App.<br />
So always when extending a core class, the suffix is "App".</p>
<pre><code>
App::import('Helper', 'Form');
class AppFormHelper extends FormHelper {
    [... my nifty code ...]
}
</code></pre>
<p>As you can see, I don't mind overhead and little performance hits if<br />
the end code will be more readable and mantainable - and beautiful.<br />
That's what you get when working in large projects, with no lifetime<br />
expectation: you need to have a code that talks by itself and that can be<br />
easily changed by every new guy assigned to work with it.</p>
<p>That's it for now, I'll try to keep posting regularly till the<br />
end of this series about the view layer and how can you get more donuts<br />
out of it - as my project does.</p>
<p>hum... feedback on my code standards are welcome. And don't forget to<br />
catch on my typos!</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Flex's Data Transfer Pattern (Class Adapters)]]></title>
<link>http://nateross.wordpress.com/?p=28</link>
<pubDate>Sat, 20 Sep 2008 03:45:13 +0000</pubDate>
<dc:creator>nross83</dc:creator>
<guid>http://nateross.de.wordpress.com/2008/09/20/flexs-data-transfer-pattern-class-adapters/</guid>
<description><![CDATA[We have been having several discussions at MediaRAIN recently about how we should handle data adapta]]></description>
<content:encoded><![CDATA[<p>We have been having several discussions at <a>MediaRAIN</a> recently about how we should handle data adaptation from the back-end to the Flex front-end.  In most cases, our back-end devs are using CakePHP which bases the object model off of the database schema.  In many of our projects, we found the Flex front-end guys going back and forth with the back-end guys about who should bear the brunt of adapting data stored in the database to the Flex front-end model.</p>
<p>The biggest drawbacks to this approach are that CakePHP does not intrinsically allow the develop to take fields from the database and convert them to a Flex front-end model.<!--more-->  In order to force CakePHP to comply, there is an extra layer that has to be forced into the framework in an unnatural way.  Normally, this hasn't been a big deal when working with back-end Java solutions as object modeling straight out of the database is a common practice (although Hibernate may have similar problems as CakePHP).  With my background in Java, and my lack of CakePHP understanding, I find it difficult to understand where the CakePHP devs are coming from. </p>
<p>There are many other benefits as well as drawbacks to modeling on the back-end in a CakePHP environment that have been carefully outlined in Aaron Hardy's blog post entitled: <a href="http://aaronhardy.com/uncategorized/the-why-what-and-where-of-custom-amf-class-adapters/">The Why, What, and Where of Custom AMF Class Adapters</a>.  I have made a few comments as well as some of the other developers at <a href="http://www.mediarain.com">MediaRAIN</a>.  Here are some of the key points from this awesome article:</p>
<p>Pros</p>
<ul>
<li>lack of high coupling</li>
<li>less of a chance of refactoring due to database schema changes</li>
<li>Decreases SWF size due to an absense of Adapter classes on the front-end</li>
<li>Reduces the need to recompile the SWF due to back-end changes (especially handy in AIR when updates need to be sent out).</li>
<li>Utilizes more of the server's juice than the client's computer (could also be a con depending on the circumstance, but I feel that in the majority of circumstances you can choose to upgrade your server speed, but you are at the mercy of the client's computer speed.)</li>
<li>Maintains the Flex front-end coding conventions and styles (i.e. first_name in PHP, firstName in Flex)</li>
<li>Maintains the Flex standard of server communication: the Data Transfer Object pattern</li>
<li>You can take advantage of AMF's object mapping abilities to automatically cast the correct Data Transfer Object in PHP to it's Flex equivalent without traversing Object hierarchys or Arrays.</li>
</ul>
<p>Cons</p>
<ul>
<li>Back-end dev may need to twist the arm of the CakePHP (or Hibernate) framework to get it to include a back-end class adapter.</li>
<li>By adapting classes on the front-end, a single back-end API can have the ability to serve multiple front-end clients due to its abstract nature, as opposed to a back-end closely tied to one particular front-end implementation.</li>
</ul>
<p>In short, my feeling is that Data Transfer Objects should be implemented on the server-side and that any departure from this methodology should be the exception rather than the rule. There is a reason why Adobe supports it and why it is used in <a href="http://en.wikipedia.org/wiki/Cairngorm_(Flex_framework)">Cairngorm</a>, <a href="http://code.google.com/p/nimbus-as3/">Nimbus</a>, <a href="http://puremvc.org/">PureMVC</a>, and other Flex frameworks and by countless Flex developers throughout the world. Keeping in mind that every good answer seems to involve the words "It depends", I am forced to not give a concise simple answer, because it really does depend on your implementation.</p>
<p>I'm sure there are plenty of other pros and cons that I am missing, or if anyone would like to comment on this discussion, please do!</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[PHP Tutorial]]></title>
<link>http://programmingzone.wordpress.com/?p=21</link>
<pubDate>Fri, 19 Sep 2008 12:04:18 +0000</pubDate>
<dc:creator>Wordpress Tutorial</dc:creator>
<guid>http://programmingzone.de.wordpress.com/2008/09/19/php-tutorial/</guid>
<description><![CDATA[Download EBOOK Free at www.eBooks-Space.com




Beginning CakePHP: From Novice to Professional
ZIP e]]></description>
<content:encoded><![CDATA[<p>Download EBOOK Free at <a href="http://www.eBooks-Space.com">www.eBooks-Space.com</a></p>
<table class="table_line" style="height:155px;" border="0" cellspacing="0" cellpadding="5" width="100%">
<tbody>
<tr>
<td style="font-size:12px;" valign="top">
<h2><a class="yellow_h2" href="http://www.ebooks-space.com/ebook/1020/Beginning-CakePHP%3A-From-Novice-to-Professional.html" target="_blank">Beginning CakePHP: From Novice to Professional</a></h2>
<p><a class="text_yello">ZIP eBook File </a><a class="text_blue"><em>"2.27 MB"</em> </a><a class="text_yello">, eBook Downloads [2]</a> <!-- AddThis Button BEGIN --><a href="blank"></a><!-- AddThis Button END --></p>
<p>CakePHP is a leading PHP based web app development framework.</p>
<p>When asking a question on forums or chat rooms, many CakePHP beginners get little help from the experts.</p>
<p>Simple questions can get a response like, Well, just read the online manual and API.</p>
<p>Unfortunately, the online manual is depreciated, and who wants to absorb a programming language or framework from an API?</p>
<p>Beginning C ...<a class="text_yello">eBook Tags - </a><a class="text_blue" href="http://www.ebooks-space.com/ebook-tags/cakephp">cakephp</a> , <a class="text_blue" href="http://www.ebooks-space.com/ebook-tags/php">php</a> , <a class="text_blue" href="http://www.ebooks-space.com/ebook-tags/beginning">beginning</a></p>
<p><a href="http://www.ebooks-space.com/ebook/1020/Beginning-CakePHP%3A-From-Novice-to-Professional.html" target="_blank"><strong>Download eBook Free</strong> ?</a></td>
<td width="130" align="right" valign="top"><img src="http://www.ebooks-space.com/cover/Beginning%20CakePHP:%20From%20Novice%20to%20Professional_2008_09_18_07_53_35.jpg" border="1" alt="From Novice to Professional ebook" width="120" /></td>
</tr>
</tbody>
</table>
<table class="table_line" style="height:155px;" border="0" cellspacing="0" cellpadding="5" width="100%">
<tbody>
<tr>
<td style="font-size:12px;" valign="top">
<h2><a class="yellow_h2" href="http://www.ebooks-space.com/ebook/686/CakePHP-Application-Development.html" target="_blank">CakePHP Application Development</a></h2>
<p><a class="text_yello">PDF eBook File </a><a class="text_blue"><em>"5.21 MB"</em> </a><a class="text_yello">, eBook Downloads [259]</a> <!-- AddThis Button BEGIN --><a href="blank"></a><!-- AddThis Button END --></p>
<p>Step-by-step introduction to rapid web development using the open-source MVC CakePHP framework</p>
<p>* Develop cutting-edge Web 2.0 applications, and write PHP code in a faster, more productive way</p>
<p>* Walk through the creation of a complete CakePHP Web application</p>
<p>* Customize the look and feel of applications using CakePHP layouts and views</p>
<p>* Make interactive applications using CakePHP, JavaS ...<a class="text_yello">eBook Tags - </a><a class="text_blue" href="http://www.ebooks-space.com/ebook-tags/"></a></p>
<p><a href="http://www.ebooks-space.com/ebook/686/CakePHP-Application-Development.html" target="_blank"><strong>Download eBook Free</strong> ?</a></td>
<td width="130" align="right" valign="top"><img src="http://www.ebooks-space.com/cover/CakePHP%20Application%20Development_2008_08_01_18_14_59.jpg" border="1" alt="Download Free CakePHP Application Development ebook" width="120" /></td>
</tr>
</tbody>
</table>
<table class="table_line" style="height:155px;" border="0" cellspacing="0" cellpadding="5" width="100%">
<tbody>
<tr>
<td style="font-size:12px;" valign="top">
<h2><a class="yellow_h2" href="http://www.ebooks-space.com/ebook/988/PHP-Essentials.html" target="_blank">PHP Essentials</a></h2>
<p><a class="text_yello">ZIP eBook File </a><a class="text_blue"><em>"8.77 MB"</em> </a><a class="text_yello">, eBook Downloads [50]</a> <!-- AddThis Button BEGIN --><a href="blank"></a><!-- AddThis Button END --></p>
<p>Write dynamically generated pages with ease using PHP! Dive into the new edition of this popular guide to PHP.</p>
<p>With a true focus on the essentials, this book gives you the solid foundation in PHP programming you?re looking for.</p>
<p>And you don?t have to be a computer scientist or programmer to learn from it! The simple, learn-by-example format of "PHP Essentials" will allow you to quickly use ...<a class="text_yello">eBook Tags - </a><a class="text_blue" href="http://www.ebooks-space.com/ebook-tags/php">php</a> , <a class="text_blue" href="http://www.ebooks-space.com/ebook-tags/php-ebook">php-ebook</a></p>
<p><a href="http://www.ebooks-space.com/ebook/988/PHP-Essentials.html" target="_blank"><strong>Download eBook Free</strong> ?</a></td>
<td width="130" align="right" valign="top"><img src="http://www.ebooks-space.com/cover/PHP%20Essentials_2008_09_11_10_07_01.jpg" border="1" alt="Download Free PHP Essentials ebook" width="120" /></td>
</tr>
</tbody>
</table>
<table class="table_line" style="height:155px;" border="0" cellspacing="0" cellpadding="5" width="100%">
<tbody>
<tr>
<td style="font-size:12px;" valign="top">
<h2><a class="yellow_h2" href="http://www.ebooks-space.com/ebook/972/Beginning-Ajax-with-PHP%3A-From-Novice-to-Professional.html" target="_blank">Beginning Ajax with PHP: From Novice to Professional</a></h2>
<p><a class="text_yello">ZIP eBook File </a><a class="text_blue"><em>"3.64 MB"</em> </a><a class="text_yello">, eBook Downloads [52]</a> <!-- AddThis Button BEGIN --><a href="blank"></a><!-- AddThis Button END --></p>
<p>Ajax breathes new life into web applications by transparently communicating and manipulating data in conjunction with a server-based technology.</p>
<p>Of all the server-based technologies capable of working in conjunction with Ajax, perhaps none are more suitable than PHP, the world's most popular scripting language.</p>
<p>Beginning Ajax with PHP: From Novice to Professional is the first book to introd ...<a class="text_yello">eBook Tags - </a><a class="text_blue" href="http://www.ebooks-space.com/ebook-tags/php">php</a> , <a class="text_blue" href="http://www.ebooks-space.com/ebook-tags/ajax">ajax</a> , <a class="text_blue" href="http://www.ebooks-space.com/ebook-tags/beginning">beginning</a></p>
<p><a href="http://www.ebooks-space.com/ebook/972/Beginning-Ajax-with-PHP%3A-From-Novice-to-Professional.html" target="_blank"><strong>Download eBook Free</strong> ?</a></td>
<td width="130" align="right" valign="top"><img src="http://www.ebooks-space.com/cover/Beginning%20Ajax%20with%20PHP:%20From%20Novice%20to%20Professional_2008_09_09_09_19_05.jpg" border="1" alt="From Novice to Professional ebook" width="120" /></td>
</tr>
</tbody>
</table>
<table class="table_line" style="height:155px;" border="0" cellspacing="0" cellpadding="5" width="100%">
<tbody>
<tr>
<td style="font-size:12px;" valign="top">
<h2><a class="yellow_h2" href="http://www.ebooks-space.com/ebook/968/PHP-Programming-with-PEAR.html" target="_blank">PHP Programming with PEAR</a></h2>
<p><a class="text_yello">PDF eBook File </a><a class="text_blue"><em>"2.34 MB"</em> </a><a class="text_yello">, eBook Downloads [27]</a> <!-- AddThis Button BEGIN --><a href="blank"></a><!-- AddThis Button END --></p>
<p>PEAR is the PHP Extension and Application Repository, and is a framework and distribution system for reusable, high-quality PHP components, available in the form of "packages".</p>
<p>In this book, you will learn how to use a number of the most powerful PEAR packages to boost your PHP development productivity.</p>
<p>By focusing on the packages for key development activities, this book gives you an in-d ...<a class="text_yello">eBook Tags - </a><a class="text_blue" href="http://www.ebooks-space.com/ebook-tags/php">php</a> , <a class="text_blue" href="http://www.ebooks-space.com/ebook-tags/pear">pear</a></p>
<p><a href="http://www.ebooks-space.com/ebook/968/PHP-Programming-with-PEAR.html" target="_blank"><strong>Download eBook Free</strong> ?</a></td>
<td width="130" align="right" valign="top"><img src="http://www.ebooks-space.com/cover/PHP%20Programming%20with%20PEAR_2008_09_09_08_39_23.jpg" border="1" alt="Download Free PHP Programming with PEAR ebook" width="120" /></td>
</tr>
</tbody>
</table>
<table class="table_line" style="height:155px;" border="0" cellspacing="0" cellpadding="5" width="100%">
<tbody>
<tr>
<td style="font-size:12px;" valign="top">
<h2><a class="yellow_h2" href="http://www.ebooks-space.com/ebook/954/PHP-Oracle-Web-Development.html" target="_blank">PHP Oracle Web Development</a></h2>
<p><a class="text_yello">ZIP eBook File </a><a class="text_blue"><em>"3.29 MB"</em> </a><a class="text_yello">, eBook Downloads [24]</a> <!-- AddThis Button BEGIN --><a href="blank"></a><!-- AddThis Button END --></p>
<p>PHP Oracle Web Development: Data processing, Security, Caching, XML, Web Services, and Ajax</p>
<p>This practical book for PHP/Oracle developers is built around well explained, easy-to-follow example code to build robust, efficient, secure solutions covering popular current topics on using PHP with Oracle.</p>
<p>Assuming no special skill level, experienced author Yuli Vasiliev shows how to install and c ...<a class="text_yello">eBook Tags - </a><a class="text_blue" href="http://www.ebooks-space.com/ebook-tags/php">php</a> , <a class="text_blue" href="http://www.ebooks-space.com/ebook-tags/oracle">oracle</a> , <a class="text_blue" href="http://www.ebooks-space.com/ebook-tags/ajax">ajax</a> , <a class="text_blue" href="http://www.ebooks-space.com/ebook-tags/web-service">web-service</a> , <a class="text_blue" href="http://www.ebooks-space.com/ebook-tags/caching">caching</a></p>
<p><a href="http://www.ebooks-space.com/ebook/954/PHP-Oracle-Web-Development.html" target="_blank"><strong>Download eBook Free</strong> ?</a></td>
<td width="130" align="right" valign="top"><img src="http://www.ebooks-space.com/cover/PHP%20Oracle%20Web%20Development_2008_09_06_09_48_55.jpg" border="1" alt="Download Free PHP Oracle Web Development ebook" width="120" /></td>
</tr>
</tbody>
</table>
<table class="table_line" style="height:155px;" border="0" cellspacing="0" cellpadding="5" width="100%">
<tbody>
<tr>
<td style="font-size:12px;" valign="top">
<h2><a class="yellow_h2" href="http://www.ebooks-space.com/ebook/714/Textpattern-Solutions%3A-PHP-Based-Content-Management-Made-Easy-.html" target="_blank">Textpattern Solutions: PHP-Based Content Management Made Easy </a></h2>
<p><a class="text_yello">ZIP eBook File </a><a class="text_blue"><em>"27.91 MB"</em> </a><a class="text_yello">, eBook Downloads [39]</a> <!-- AddThis Button BEGIN --><a href="blank"></a><!-- AddThis Button END --></p>
<p>Textpattern is a powerful, PHP-based content management system that allows you to build pretty much any kind of data-driven website quickly and easily.</p>
<p>It is very popular among designers and developers alike, and has an active community of users. Sound good?</p>
<p>Well, you're in luckthe book you're holding now shows you how to use every aspect of Textpattern to a professional standard.</p>
<p>Text ...<a class="text_yello">eBook Tags - </a><a class="text_blue" href="http://www.ebooks-space.com/ebook-tags/"></a></p>
<p><a href="http://www.ebooks-space.com/ebook/714/Textpattern-Solutions%3A-PHP-Based-Content-Management-Made-Easy-.html" target="_blank"><strong>Download eBook Free</strong> ?</a></td>
<td width="130" align="right" valign="top"><img src="http://www.ebooks-space.com/cover/Textpattern%20Solutions:%20PHP-Based%20Content%20Management%20Made%20Easy%20_2008_08_04_08_33_06.jpg" border="1" alt="PHP-Based Content Management Made Easy  ebook" width="120" /></td>
</tr>
</tbody>
</table>
<table class="table_line" style="height:155px;" border="0" cellspacing="0" cellpadding="5" width="100%">
<tbody>
<tr>
<td style="font-size:12px;" valign="top">
<h2><a class="yellow_h2" href="http://www.ebooks-space.com/ebook/711/PHP-in-Action%3A-Objects-Design-Agility-.html" target="_blank">PHP in Action: Objects Design Agility </a></h2>
<p><a class="text_yello">PDF eBook File </a><a class="text_blue"><em>"6.26 MB"</em> </a><a class="text_yello">, eBook Downloads [58]</a> <!-- AddThis Button BEGIN --><a href="blank"></a><!-- AddThis Button END --></p>
<p>To keep programming productive and enjoyable, state-of-the-art practices and principles are essential.</p>
<p>Object-oriented programming and design help manage complexity by keeping components cleanly separated.</p>
<p>Unit testing helps prevent endless, exhausting debugging sessions. Refactoring keeps code supple and readable.</p>
<p>PHP offers all this-and more.</p>
<p>This book shows you how to apply PHP ...<a class="text_yello">eBook Tags - </a><a class="text_blue" href="http://www.ebooks-space.com/ebook-tags/"></a></p>
<p><a href="http://www.ebooks-space.com/ebook/711/PHP-in-Action%3A-Objects-Design-Agility-.html" target="_blank"><strong>Download eBook Free</strong> ?</a></td>
<td width="130" align="right" valign="top"><img src="http://www.ebooks-space.com/cover/PHP%20in%20Action:%20Objects%20Design%20Agility%20_2008_08_04_08_23_09.jpg" border="1" alt="Objects Design Agility  ebook" width="120" /></td>
</tr>
</tbody>
</table>
<table class="table_line" style="height:155px;" border="0" cellspacing="0" cellpadding="5" width="100%">
<tbody>
<tr>
<td style="font-size:12px;" valign="top">
<h2><a class="yellow_h2" href="http://www.ebooks-space.com/ebook/709/PHP-5-Unleashed.html" target="_blank">PHP 5 Unleashed</a></h2>
<p><a class="text_yello">PDF eBook File </a><a class="text_blue"><em>"5.08 MB"</em> </a><a class="text_yello">, eBook Downloads [77]</a> <!-- AddThis Button BEGIN --><a href="blank"></a><!-- AddThis Button END --></p>
<p>Over 12 million Internet domains worldwide use the PHP language to power their websites.</p>
<p>If you are a programmer included in this group, or would like to be one, you should pick up a copy of PHP Unleashed.</p>
<p>The definitive guide in PHP programming, PHP Unleashed thoroughly and authoritatively covers the release of PHP 5, as well as advanced topics not found in other books.</p>
<p>It begins with ...<a class="text_yello">eBook Tags - </a><a class="text_blue" href="http://www.ebooks-space.com/ebook-tags/"></a></p>
<p><a href="http://www.ebooks-space.com/ebook/709/PHP-5-Unleashed.html" target="_blank"><strong>Download eBook Free</strong> ?</a></td>
<td width="130" align="right" valign="top"><img src="http://www.ebooks-space.com/cover/PHP%205%20Unleashed_2008_08_04_08_11_58.jpg" border="1" alt="Download Free PHP 5 Unleashed ebook" width="120" /></td>
</tr>
</tbody>
</table>
<table class="table_line" style="height:155px;" border="0" cellspacing="0" cellpadding="5" width="100%">
<tbody>
<tr>
<td style="font-size:12px;" valign="top">
<h2><a class="yellow_h2" href="http://www.ebooks-space.com/ebook/913/Mastering-phpMyAdmin-for-Effective-MySQL-Management.html" target="_blank">Mastering phpMyAdmin for Effective MySQL Management</a></h2>
<p><a class="text_yello">ZIP eBook File </a><a class="text_blue"><em>"4.68 MB"</em> </a><a class="text_yello">, eBook Downloads [23]</a> <!-- AddThis Button BEGIN --><a href="blank"></a><!-- AddThis Button END --></p>
<p>this book will show you how to increase your productivity and control when working with your databases.</p>
<p>You will learn how to:</p>
<p>- Administer MySQL users and privileges, and get statistics about MySQL servers and databases</p>
<p>- Manage databases, table data and structures, and indexes</p>
<p>- Use bookmarks and metadata</p>
<p>- Generate multiple SQL queries</p>
<p>- Generate better documentation of e ...<a class="text_yello">eBook Tags - </a><a class="text_blue" href="http://www.ebooks-space.com/ebook-tags/phpmyadmin">phpmyadmin</a> , <a class="text_blue" href="http://www.ebooks-space.com/ebook-tags/php">php</a> , <a class="text_blue" href="http://www.ebooks-space.com/ebook-tags/mysql">mysql</a> , <a class="text_blue" href="http://www.ebooks-space.com/ebook-tags/admin">admin</a></p>
<p><a href="http://www.ebooks-space.com/ebook/913/Mastering-phpMyAdmin-for-Effective-MySQL-Management.html" target="_blank"><strong>Download eBook Free</strong> ?</a></td>
<td width="130" align="right" valign="top"><img src="http://www.ebooks-space.com/cover/Mastering%20phpMyAdmin%20for%20Effective%20MySQL%20Management_2008_09_01_05_52_14.jpg" border="1" alt="Download Free Mastering phpMyAdmin for Effective MySQL Management ebook" width="120" /></td>
</tr>
</tbody>
</table>
<table class="table_line" style="height:155px;" border="0" cellspacing="0" cellpadding="5" width="100%">
<tbody>
<tr>
<td style="font-size:12px;" valign="top">
<h2><a class="yellow_h2" href="http://www.ebooks-space.com/ebook/881/The-PEAR-Installer-Manifesto.html" target="_blank">The PEAR Installer Manifesto</a></h2>
<p><a class="text_yello">ZIP eBook File </a><a class="text_blue"><em>"4.43 MB"</em> </a><a class="text_yello">, eBook Downloads [11]</a> <!-- AddThis Button BEGIN --><a href="blank"></a><!-- AddThis Button END --></p>
<p>This book will show you a new way of organizing your PHP development, by leveraging the full power of the PEAR Installer.</p>
<p>In a sense, the PEAR Installer is a step above a software design pattern, a meta-development pattern that can be used to systematically organize all of your PHP development.</p>
<p>You will learn how to organize your code into packages using the package.xml format.</p>
<p>You wil ...<a class="text_yello">eBook Tags - </a><a class="text_blue" href="http://www.ebooks-space.com/ebook-tags/pear">pear</a> , <a class="text_blue" href="http://www.ebooks-space.com/ebook-tags/php">php</a> , <a class="text_blue" href="http://www.ebooks-space.com/ebook-tags/perl">perl</a></p>
<p><a href="http://www.ebooks-space.com/ebook/881/The-PEAR-Installer-Manifesto.html" target="_blank"><strong>Download eBook Free</strong> ?</a></td>
<td width="130" align="right" valign="top"><img src="http://www.ebooks-space.com/cover/The%20PEAR%20Installer%20Manifesto_2008_08_27_07_15_39.jpg" border="1" alt="Download Free The PEAR Installer Manifesto ebook" width="120" /></td>
</tr>
</tbody>
</table>
<table class="table_line" style="height:155px;" border="0" cellspacing="0" cellpadding="5" width="100%">
<tbody>
<tr>
<td style="font-size:12px;" valign="top">
<h2><a class="yellow_h2" href="http://www.ebooks-space.com/ebook/829/Beginning-PHP5-Apache-and-MySQL-Web-Development.html" target="_blank">Beginning PHP5 Apache and MySQL Web Development</a></h2>
<p><a class="text_yello">ZIP eBook File </a><a class="text_blue"><em>"5.57 MB"</em> </a><a class="text_yello">, eBook Downloads [118]</a> <!-- AddThis Button BEGIN --><a href="blank"></a><!-- AddThis Button END --></p>
<p>Beginning PHP5, Apache, and MySQL Web Development (Programmer to Programmer)</p>
<p>This update to a Wrox bestseller dives in and guides the reader through the entire process of creating dynamic, data-driven sites using the open source "AMP" model: Apache Web server, the MySQL database system, and the PHP scripting language.</p>
<p>The team of expert authors covers PHP scripting, database management, se ...<a class="text_yello">eBook Tags - </a><a class="text_blue" href="http://www.ebooks-space.com/ebook-tags/php5">php5</a> , <a class="text_blue" href="http://www.ebooks-space.com/ebook-tags/mysql">mysql</a></p>
<p><a href="http://www.ebooks-space.com/ebook/829/Beginning-PHP5-Apache-and-MySQL-Web-Development.html" target="_blank"><strong>Download eBook Free</strong> ?</a></td>
<td width="130" align="right" valign="top"><img src="http://www.ebooks-space.com/cover/Beginning%20PHP5%20Apache%20and%20MySQL%20Web%20Development_2008_08_20_09_21_16.jpg" border="1" alt="Download Free Beginning PHP5 Apache and MySQL Web Development ebook" width="120" /></td>
</tr>
</tbody>
</table>
<table class="table_line" style="height:155px;" border="0" cellspacing="0" cellpadding="5" width="100%">
<tbody>
<tr>
<td style="font-size:12px;" valign="top">
<h2><a class="yellow_h2" href="http://www.ebooks-space.com/ebook/824/Professional-PHP4-Programming.html" target="_blank">Professional PHP4 Programming</a></h2>
<p><a class="text_yello">CHM eBook File </a><a class="text_blue"><em>"3.45 MB"</em> </a><a class="text_yello">, eBook Downloads [39]</a> <!-- AddThis Button BEGIN --><a href="blank"></a><!-- AddThis Button END --></p>
<p>PHP is an open source, server-side HTML-embedded web-scripting language for creating dynamic web pages. Outside of being browser-independent, it offers a simple and universal cross-platform solution for e-commerce, complex web, and database-driven applications.</p>
<p>Professional PHP4 will show you exactly how to create state of the art web applications that scale well, utilize databases optimally, ...<a class="text_yello">eBook Tags - </a><a class="text_blue" href="http://www.ebooks-space.com/ebook-tags/php4">php4</a></p>
<p><a href="http://www.ebooks-space.com/ebook/824/Professional-PHP4-Programming.html" target="_blank"><strong>Download eBook Free</strong> ?</a></td>
<td width="130" align="right" valign="top"><img src="http://www.ebooks-space.com/cover/Professional%20PHP4%20Programming_2008_08_19_10_28_49.jpg" border="1" alt="Download Free Professional PHP4 Programming ebook" width="120" /></td>
</tr>
</tbody>
</table>
<table class="table_line" style="height:155px;" border="0" cellspacing="0" cellpadding="5" width="100%">
<tbody>
<tr>
<td style="font-size:12px;" valign="top">
<h2><a class="yellow_h2" href="http://www.ebooks-space.com/ebook/780/PHP-Basics-In-Pictures.html" target="_blank">PHP Basics In Pictures</a></h2>
<p><a class="text_yello">PDF eBook File </a><a class="text_blue"><em>"2.15 MB"</em> </a><a class="text_yello">, eBook Downloads [83]</a> <!-- AddThis Button BEGIN --><a href="blank"></a><!-- AddThis Button END --></p>
<p>Paul Gruhn, "PHP Basics In Pictures"<br />
141 Pages &#124; PDF Version &#124; 2.29 MB &#124; English &#124; ISBN 1597061093</p>
<p>Visibookst is a trademark of Visibooks , LLC.<br />
All brand and product names in this book are trademarks or registered trademarks of their respective companies.</p>
<p>vlslbooks" makes every effort to ensure that the information in this book is accurate. However, Vislbooks" makes no warranty, express ...<a class="text_yello">eBook Tags - </a><a class="text_blue" href="http://www.ebooks-space.com/ebook-tags/"></a></p>
<p><a href="http://www.ebooks-space.com/ebook/780/PHP-Basics-In-Pictures.html" target="_blank"><strong>Download eBook Free</strong> ?</a></td>
<td width="130" align="right" valign="top"><img src="http://www.ebooks-space.com/cover/PHP%20Basics%20In%20Pictures_2008_08_13_07_04_58.jpg" border="1" alt="Download Free PHP Basics In Pictures ebook" width="120" /></td>
</tr>
</tbody>
</table>
<table class="table_line" style="height:155px;" border="0" cellspacing="0" cellpadding="5" width="100%">
<tbody>
<tr>
<td style="font-size:12px;" valign="top">
<h2><a class="yellow_h2" href="http://www.ebooks-space.com/ebook/946/The-PEAR-Installer-Manifesto.html" target="_blank">The PEAR Installer Manifesto</a></h2>
<p><a class="text_yello">ZIP eBook File </a><a class="text_blue"><em>"4.15 MB"</em> </a><a class="text_yello">, eBook Downloads [13]</a> <!-- AddThis Button BEGIN --><a href="blank"></a><!-- AddThis Button END --></p>
<p>Description<br />
The creator of this powerful and multi-faceted code management and deployment system shows you how to unleash its hidden power across your complete PHP development lifecycle.</p>
<p>PEAR Installer is the preferred PEAR package for installing PEAR packages.</p>
<p>It can be used to make sure that the most up to date version of a package is present on your server.</p>
<p>This book reveals the fu ...<a class="text_yello">eBook Tags - </a><a class="text_blue" href="http://www.ebooks-space.com/ebook-tags/pear">pear</a> , <a class="text_blue" href="http://www.ebooks-space.com/ebook-tags/php">php</a></p>
<p><a href="http://www.ebooks-space.com/ebook/946/The-PEAR-Installer-Manifesto.html" target="_blank"><strong>Download eBook Free</strong> ?</a></td>
<td width="130" align="right" valign="top"><img src="http://www.ebooks-space.com/cover/The%20PEAR%20Installer%20Manifesto_2008_09_05_06_46_11.jpg" border="1" alt="Download Free The PEAR Installer Manifesto ebook" width="120" /></td>
</tr>
</tbody>
</table>
<table class="table_line" style="height:155px;" border="0" cellspacing="0" cellpadding="5" width="100%">
<tbody>
<tr>
<td style="font-size:12px;" valign="top">
<h2><a class="yellow_h2" href="http://www.ebooks-space.com/ebook/926/PHP-Pocket-Reference.html" target="_blank">PHP Pocket Reference</a></h2>
<p><a class="text_yello">ZIP eBook File </a><a class="text_blue"><em>"2.73 MB"</em> </a><a class="text_yello">, eBook Downloads [52]</a> <!-- AddThis Button BEGIN --><a href="blank"></a><!-- AddThis Button END --></p>
<p>Simple, to the point, and compact--in fact, exactly what you've come to expect in an O'Reilly Pocket Reference--the second edition of PHP Pocket Reference is thoroughly updated to include the specifics of PHP 4.</p>
<p>PHP Pocket Reference is both a handy introduction to PHP syntax and structure, and a quick reference to the vast array of functions provided by PHP.</p>
<p>The quick reference section org ...<a class="text_yello">eBook Tags - </a><a class="text_blue" href="http://www.ebooks-space.com/ebook-tags/php">php</a> , <a class="text_blue" href="http://www.ebooks-space.com/ebook-tags/reference">reference</a></p>
<p><a href="http://www.ebooks-space.com/ebook/926/PHP-Pocket-Reference.html" target="_blank"><strong>Download eBook Free</strong> ?</a></td>
<td width="130" align="right" valign="top"><img src="http://www.ebooks-space.com/cover/PHP%20Pocket%20Reference_2008_09_02_07_17_38.jpg" border="1" alt="Download Free PHP Pocket Reference ebook" width="120" /></td>
</tr>
</tbody>
</table>
<table class="table_line" style="height:155px;" border="0" cellspacing="0" cellpadding="5" width="100%">
<tbody>
<tr>
<td style="font-size:12px;" valign="top">
<h2><a class="yellow_h2" href="http://www.ebooks-space.com/ebook/922/Upgrading-to-PHP-5.html" target="_blank">Upgrading to PHP 5</a></h2>
<p><a class="text_yello">CHM eBook File </a><a class="text_blue"><em>"0.56 MB"</em> </a><a class="text_yello">, eBook Downloads [24]</a> <!-- AddThis Button BEGIN --><a href="blank"></a><!-- AddThis Button END --></p>
<p>If you're using PHP 4, then chances are good that an upgrade to PHP 5 is in your future. The more you've heard about the exciting new features in PHP 5, the sooner that upgrade is probably going to be.</p>
<p>Although an in-depth, soup-to-nuts reference guide to the language is good to have on hand, it's not the book an experienced PHP programmer needs to get started with the latest release.</p>
<p>What ...<a class="text_yello">eBook Tags - </a><a class="text_blue" href="http://www.ebooks-space.com/ebook-tags/php">php</a> , <a class="text_blue" href="http://www.ebooks-space.com/ebook-tags/php5">php5</a></p>
<p><a href="http://www.ebooks-space.com/ebook/922/Upgrading-to-PHP-5.html" target="_blank"><strong>Download eBook Free</strong> ?</a></td>
<td width="130" align="right" valign="top"><img src="http://www.ebooks-space.com/cover/Upgrading%20to%20PHP%205_2008_09_02_06_03_30.jpg" border="1" alt="Download Free Upgrading to PHP 5 ebook" width="120" /></td>
</tr>
</tbody>
</table>
<table class="table_line" style="height:155px;" border="0" cellspacing="0" cellpadding="5" width="100%">
<tbody>
<tr>
<td style="font-size:12px;" valign="top">
<h2><a class="yellow_h2" href="http://www.ebooks-space.com/ebook/919/Web-Database-Applications-with-PHP-and-MySQL.html" target="_blank">Web Database Applications with PHP and MySQL</a></h2>
<p><a class="text_yello">ZIP eBook File </a><a class="text_blue"><em>"2.66 MB"</em> </a><a class="text_yello">, eBook Downloads [67]</a> <!-- AddThis Button BEGIN --><a href="blank"></a><!-- AddThis Button END --></p>
<p>There are many reasons for serving up dynamic content from a web site: to offer an online shopping site, create customized information pages for users, or just manage a large volume of content through a database.</p>
<p>Anyone with a modest knowledge of HTML and web site management can learn to create dynamic content through the PHP programming language and the MySQL database.</p>
<p>This book gives you ...<a class="text_yello">eBook Tags - </a><a class="text_blue" href="http://www.ebooks-space.com/ebook-tags/web-database">web-database</a> , <a class="text_blue" href="http://www.ebooks-space.com/ebook-tags/php">php</a> , <a class="text_blue" href="http://www.ebooks-space.com/ebook-tags/mysql">mysql</a> , <a class="text_blue" href="http://www.ebooks-space.com/ebook-tags/website">website</a></p>
<p><a href="http://www.ebooks-space.com/ebook/919/Web-Database-Applications-with-PHP-and-MySQL.html" target="_blank"><strong>Download eBook Free</strong> ?</a></td>
<td width="130" align="right" valign="top"><img src="http://www.ebooks-space.com/cover/Web%20Database%20Applications%20with%20PHP%20and%20MySQL_2008_09_02_05_46_31.jpg" border="1" alt="Download Free Web Database Applications with PHP and MySQL ebook" width="120" /></td>
</tr>
</tbody>
</table>
<table class="table_line" style="height:155px;" border="0" cellspacing="0" cellpadding="5" width="100%">
<tbody>
<tr>
<td style="font-size:12px;" valign="top">
<h2><a class="yellow_h2" href="http://www.ebooks-space.com/ebook/914/PHP-Solutions%3A-Dynamic-Web-Design-Made-Easy.html" target="_blank">PHP Solutions: Dynamic Web Design Made Easy</a></h2>
<p><a class="text_yello">ZIP eBook File </a><a class="text_blue"><em>"8.64 MB"</em> </a><a class="text_yello">, eBook Downloads [89]</a> <!-- AddThis Button BEGIN --><a href="blank"></a><!-- AddThis Button END --></p>
<p>In this book you'll learn how to:</p>
<p>*Create dynamic websites with design and usability in mind, as well as functionality<br />
*Understand how PHP scripts work, giving you confidence to adapt them to your own needs<br />
*Bring online forms to life, check required fields, and ensure user input is safe to process<br />
*Upload files and automatically create thumbnails from larger images<br />
*Manage website content ...<a class="text_yello">eBook Tags - </a><a class="text_blue" href="http://www.ebooks-space.com/ebook-tags/php">php</a> , <a class="text_blue" href="http://www.ebooks-space.com/ebook-tags/web-design">web-design</a> , <a class="text_blue" href="http://www.ebooks-space.com/ebook-tags/dynamic">dynamic</a></p>
<p><a href="http://www.ebooks-space.com/ebook/914/PHP-Solutions%3A-Dynamic-Web-Design-Made-Easy.html" target="_blank"><strong>Download eBook Free</strong> ?</a></td>
<td width="130" align="right" valign="top"><img src="http://www.ebooks-space.com/cover/PHP%20Solutions:%20Dynamic%20Web%20Design%20Made%20Easy_2008_09_01_05_58_28.jpg" border="1" alt="Dynamic Web Design Made Easy ebook" width="120" /></td>
</tr>
</tbody>
</table>
]]></content:encoded>
</item>
<item>
<title><![CDATA[CakePHP: Subclassing Models]]></title>
<link>http://richardathome.wordpress.com/?p=998</link>
<pubDate>Fri, 19 Sep 2008 09:51:16 +0000</pubDate>
<dc:creator>Richard@Home</dc:creator>
<guid>http://richardathome.de.wordpress.com/2008/09/19/cakephp-subclassing-models/</guid>
<description><![CDATA[Spotted in the comments on the Bakery:
App::Import (&#8217;model&#8217;, &#8216;User&#8217;);
class ]]></description>
<content:encoded><![CDATA[<p>Spotted in the comments on the <a href="http://bakery.cakephp.org/articles/view/subclass-behavior">Bakery</a>:</p>
<blockquote><p>App::Import ('model', 'User');<br />
class Seller extends User {</p>
<p>var $name = 'Seller';</p>
<p>}</p></blockquote>
<p>Thanks to Przemysław Sitek for this useful snippet!</p>
]]></content:encoded>
</item>

</channel>
</rss>
