Skip to content

Commit

Permalink
merge from 1.0.
Browse files Browse the repository at this point in the history
  • Loading branch information
qiang.xue committed Jun 7, 2009
1 parent 0c1e4a5 commit 0f48a6b
Show file tree
Hide file tree
Showing 91 changed files with 3,466 additions and 292 deletions.
6 changes: 5 additions & 1 deletion CHANGELOG
Expand Up @@ -6,8 +6,12 @@ Version 1.1a to be released
---------------------------
- New: Refactored scenario-based validation and massive assignments (Qiang)

Version 1.0.6 to be released

Version 1.0.7 to be released
----------------------------

Version 1.0.6 June 7, 2009
--------------------------
- Bug #305: column aliases used in CActiveFinder should be quoted so that their cases are kept (Qiang)
- Bug #308: typo in CLinkPager CSS class name (Qiang)
- Bug #310: Leading space in auto generated labels if they end with "ID" (Qiang)
Expand Down
4 changes: 4 additions & 0 deletions UPGRADE
Expand Up @@ -15,6 +15,10 @@ Upgrading from v1.0.x
Please read the Guide for details on how to upgrade from v1.0.x to v1.1.


Upgrading from v1.0.6
---------------------


Upgrading from v1.0.5
---------------------

Expand Down
10 changes: 10 additions & 0 deletions docs/blog/es/start.overview.txt
@@ -0,0 +1,10 @@
Construyendo un Sistema de Blog usando Yii
==========================================

Este tutorial describe como utilizar Yii para desarrollar una aplicación de blog tal como [el blog demo](http://www.yiiframework.com/demos/blog/). Explica a nivel detallado cada paso a seguir durante el desarrollo, el cual puede ser aplicado de la misma forma en el desarrollo de otras aplicaciones Web. Como un complemento de [la guía](http://www.yiiframework.com/doc/guide/) y [la Referencia de Clases](http://www.yiiframework.com/doc/api/) de Yii, este tutorial pretende mostrar el uso practico de Yii en vez de realizar una descripción definitiva y minuciosa.

Los lectores de este tutorial no requieren tener conocimiento previo sobre Yii. Aun así, conocimiento básico de Programación Orientada a Objetos (OOP) y programación de bases de datos ayudaría a los lectores a entender este tutorial con mayor facilidad.

Este tutorial se encuentra publicado bajo [los Términos de Documentación de Yii](http://www.yiiframework.com/doc/terms/).

<div class="revision">$Id: start.overview.txt 681 2009-02-16 04:57:01Z burtitica $</div>
84 changes: 84 additions & 0 deletions docs/blog/es/start.testdrive.txt
@@ -0,0 +1,84 @@
Lanzamiento de Prueba con Yii
=============================

En ésta sección, se describe como crear el esqueleto de una aplicación que nos servirá como punto de partida. Por simplicidad, asumimos que la raíz de nuestro Servidor es `/wwwroot` y que el URL correspondiente es `http://www.example.com/`.

Instalando Yii
--------------

Inicialmente instalamos el framework de Yii. Obtenga una copia del archivo (versión 1.0.3 o superior) en [www.yiiframework.com](http://www.yiiframework.com/download) y descomprimala al directorio `/wwwroot/Yii`. Asegúrese que el directorio `/wwwroot/Yii/framework` haya sido creado.

> Tip: El framework de Yii puede instalarse en cualquier lugar del sistema de directorios. El directorio `framework` contiene todo el código estructural y es el único directorio necesario para desplegar una aplicación. Una única instalación de Yii puede ser utilizada para múltiples aplicaciones Yii.

Luego de haber instalado Yii, abra una ventana nueva en su explorador y accese al URL `http://www.example.com/yii/requirements/index.php`. Este muestra la revisión de requerimientos provistos en la versión descargada. Asegúrese de que su Servidor y la instalación de PHP cumpla con los requerimientos mínimos para Yii. En particular, deberíamos habilitar las dos extensiones PHP `pdo` y `pdo_sqlite` las cuales son requeridas por nuestra aplicación blog para acceder a la base de datos SQLite.


Creando el Esqueleto de la Aplicación
-----------------------------

Luego utilizamos la herramienta `yiic` para crear una aplicación esqueleto bajo el directorio `/wwwroot/blog`. La herramienta `yiic` es una herramienta de línea de comandos incluida en Yii. Esta puede ser utilizada para generar código para diferentes tareas.

Abra una ventana de comandos y ejecute el siguiente comando:

~~~
% /wwwroot/Yii/framework/yiic webapp /wwwroot/blog
Create a Web application under '/wwwroot/blog'? [Yes|No]y
......
~~~

> Tip: Para poder utilizar la herramienta `yiic` tal como se indica, el programa CLI PHP debe estar en el path (camino) de búsqueda de comandos. De lo contrario, el comando se puede reemplazar por el siguiente:
>
>~~~
> path/to/php /wwwroot/Yii/framework/yiic.php webapp /wwwroot/blog
>~~~

Para probar la aplicación que acabamos de crear, abra una ventana de explorador y navegue al URL `http://example.com/blog/index.php`. Deberíamos ver que nuestra aplicación posee tres páginas funcionales: la página de inicio, la página de contacto y la página para iniciar sesión.

A continuación, describimos brevemente lo que tenemos en la aplicación esqueleto.


###Script de Entrada

Tenemos un archivo llamado [script de entrada](http://www.yiiframework.com/doc/guide/basics.entry) `/wwwroot/blog/index.php` que tiene el siguiente contenido:

~~~
[php]
<?php
$yii='/wwwroot/framework/yii.php';
$config=dirname(__FILE__).'/protected/config/main.php';

// remove the following line when in production mode
defined('YII_DEBUG') or define('YII_DEBUG',true);

require_once($yii);
Yii::createWebApplication($config)->run();
~~~

Este es el único script al que los usuarios Web tienen acceso directo. El script primero incluye el archivo bootsrap de Yii `yii.php`. Luego crea una instancia de la [aplicación](http://www.yiiframework.com/doc/guide/basics.application) con la configuración especificada y luego ejecuta la aplicación.


###Directorio Base de la Aplicación

También tenemos un [directorio base de la aplicación](http://www.yiiframework.com/doc/guide/basics.application#application-base-directory) `/wwwroot/blog/protected`. La mayoría de nuestro código y datos estarán ubicados bajo este directorio, y debería estar protegido del accesos de usuarios Web. Para el uso en [Apache httpd Web Server], bajo este directorio creamos un archivo `.htaccess` con el siguiente contenido:

~~~
deny from all
~~~

Para otros servidores, por favor refiérase al manual correspondiente sobre la protección de directorios de usuarios de Web.


Flujo de la Aplicación
----------------------------------

Para facilitar la comprensión del funcionamiento de Yii, describimos el flujo en nuestra aplicación esqueleto cuando un usuario accesa a la página de contacto:

1. El [script de entrada](http://www.yiiframework.com/doc/guide/basics.entry) es ejecutado por el Servidor para procesar la solicitud;
2. Una instancia de la [aplicación](http://www.yiiframework.com/doc/guide/basics.application) es creada y configurada con los valores iniciales especificados en el archivo de configuración de la aplicación `/wwwroot/blog/protected/config/main.php`;
3. La aplicación resuelve la solicitud en un [controlador](http://www.yiiframework.com/doc/guide/basics.controller) y una [acción de controlador](http://www.yiiframework.com/doc/guide/basics.controller#action). Para la solicitud de la página de contacto, esta se resuelve como el controlador de `sitio` (`site`) y la acción de `contacto` (`contact`).
4. La aplicación crea el controlador `site` en términos de una instancia `SiteController` y luego la ejecuta;
5. La instancia `SiteController` ejecuta la acción `contact` al llamar a su método `actionContact()`;
6. El método `actionContact` genera una [vista(view)](http://www.yiiframework.com/doc/guide/basics.view) llamada `contact` al usuario Web. Internamente, esto se logra al incluir el archivo de vista `/wwwroot/blog/protected/views/site/contact.php` e incluyendo el resultado en el archivo de [layout](http://www.yiiframework.com/doc/guide/basics.view#layout) `/wwwroot/blog/protected/views/layouts/main.php`.


<div class="revision">$Id: start.testdrive.txt 681 2009-02-16 04:57:01Z buritica $</div>
36 changes: 36 additions & 0 deletions docs/blog/es/toc.txt
@@ -0,0 +1,36 @@
* Pasos Iniciales
- [Visión General](start.overview)
- [Lanzamiento de Prueba con Yii](start.testdrive)
- [Análisis de Requerimientos](start.requirements)
- [Diseño General](start.design)

* Prototipo Inicial
- [Configurando la Base de Datos](prototype.database)
- ["Andamiaje" (Scaffolding)](prototype.scaffold)
- [Autenticación de Usuario](prototype.auth)
- [Resumen](prototype.summary)

* Administración de Posts
- [Personalizando el Modelo Post](post.model)
- [Crear y Actualizar Posts](post.create)
- [Mostrando Posts](post.display)
- [Administración de Posts](post.admin)

* Administración de Comentarios
- [Personalizando el Modelo Comment](comment.model)
- [Crear y Actualizar Comentarios](comment.create)
- [Administración de Comentarios](comment.admin)

* "Portlets"
- [Estableciendo Arquitectura de "Portlets"](portlet.base)
- [Creación de Portlet Menú de Usuarios](portlet.menu)
- [Creación de Portlet de Inicio de Sesión](portlet.login)
- [Creación de Portlet de Nube de Etiquetas (Tag Cloud)](portlet.tags)
- [Creación de Portlet de Comentarios Recientes](portlet.comments)

* Trabajo Final
- [Embellecimiento de URLs](final.url)
- [Registro de Errores](final.logging)
- [Personalización de Vista de Errores](final.error)
- [Configuración Final y Despliegue](final.deployment)
- [Mejoras Futuras](final.future)
84 changes: 84 additions & 0 deletions docs/blog/ja/prototype.auth.txt
@@ -0,0 +1,84 @@
ユーザ認証
===================

このブログアプリケーションでは、システムオーナとゲストユーザの区別が必要です。 したがって、[ユーザ認証](http://www.yiiframework.com/doc/guide/topics.auth)機能を実装する必要があります。

スケルトンアプリケーションにはすでにユーザ認証機能が備わっています。 ユーザ名とパスワードのどちらもが `demo` 、もしくは `admin` で確認することができます。このセクションでは、認証を `User` テーブルに基づいて行うよう、対応するコードを修正します。

ユーザ認証は [IUserIdentity] インターフェイスを実装するクラスで行われます。スケルトンアプリケーションでは、この問題のために `UserIdentity` クラスを使っています。このクラスファイルは、`/wwwroot/blog/protected/components/UserIdentity.php` に保存されています。

> Tip|ヒント: 規約により、クラスファイル名は対応するクラス名に接尾辞に拡張子 `.php` をつけたものになります。この規約に従って、[パスエイリアス](http://www.yiiframework.com/doc/guide/basics.namespace)を使ったクラス参照が可能です。 例えば、`UserIdentity` クラスを、`application.components.UserIdentity` というエイリアスで参照することができます。Yii の多くの API において、パスエイリアスを利用可能です。(例:[Yii::createComponent()|YiiBase::createComponent])そして、パスエイリアスを使うことは、コードに絶対パスを埋め込む必要をなくします。絶対パスを記述することはしばしばアプリケーション配置の際のトラブルの元になります。

`UserIdentity` クラスを以下のように修正します。

~~~
[php]
<?php
class UserIdentity extends CUserIdentity
{
private $_id;

public function authenticate()
{
$username=strtolower($this->username);
$user=User::model()->find('LOWER(username)=?',array($username));
if($user===null)
$this->errorCode=self::ERROR_USERNAME_INVALID;
else if(md5($this->password)!==$user->password)
$this->errorCode=self::ERROR_PASSWORD_INVALID;
else
{
$this->_id=$user->id;
$this->username=$user->username;
$this->errorCode=self::ERROR_NONE;
}
return !$this->errorCode;
}

public function getId()
{
return $this->_id;
}
}
~~~

`authenticate()` メソッドにおいて、 `User` クラスを用いて `User` テーブルの行を参照しています。`User` テーブルの `username` 列は特定のユーザ名(大文字小文字の区別なし)と同一です。`User` クラスは前のセクションで `yiic` ツールによって作られたものであることを思い出してください。`User` クラスは [CActiveRecord] を継承しているため、 [ActiveRecord 機能](http://www.yiiframework.com/doc/guide/database.ar)を、オブジェクト指向に(OOP)のっとったやり方で `User` テーブルにアクセスすることができます。

`UserIdentity` クラスでは、`getId()` メソッドをオーバーライドして、`User` テーブルから見つかったユーザの `id` を返すようにしています。元の実装では、代わりにユーザ名を返すようになっていました。`username` と `id` プロパティはともにユーザセッションに保存され、コードのどこからでも `Yii::app()->user` でアクセスすることが可能です。

> Tip|ヒント: `UserIdentity` クラスにおいて、対応するクラスファイルを読み込むことなく [CUserIdentity] を参照しています。 これは [CUserIdentity] が Yii framework のコアクラスであるためです。Yii は任意のコアクラスが最初に参照されたときに、自動的のそのクラスファイルを読み込みます。`User` クラスでも同じことが行われています。 なぜなら、 `User` クラスファイルが、`/wwwroot/blog/protected/models` ディレクトリ以下にあり、アプリケーション初期構成の書きコードで PHP の `include_path` に追加されているからです。
>
> ~~~
> [php]
> return array(
> ......
> 'import'=>array(
> 'application.models.*',
> 'application.components.*',
> ),
> ......
> );
> ~~~
>
> 上記の初期構成は `/wwwroot/blog/protected/models` か `/wwwroot/blog/protected/components` の下にある、いかなるクラスファイルも、最初に参照された時点で自動的に読み込まれることを示します。

`UserIdentity` クラスは主に `LoginForm` クラスで、ログインページにで入力されたユーザ名とパスワードを元にユーザを認証するために使われます。以下コードではどのように `UserIdentity` が使われるのかを示します。

~~~
[php]
$identity=new UserIdentity($username,$password);
$identity->authenticate();
switch($identity->errorCode)
{
case UserIdentity::ERROR_NONE:
Yii::app()->user->login($identity);
break;
......
}
~~~

> Info|情報: identity クラスと `user` アプリケーションコンポーネントはしばしば混同されます。前者は認証を行う方法のことであり、後者は現在のユーザに関する情報をあらわします。アプリケーションがもてる `user` コンポーネントはひとつだけですが、identity クラスは複数持つことができます。identityクラスはどのような認証方法がサポートされるかによります。いったん認証されると、identity インスタンスから `user` コンポーネントへ情報が渡され、 アプリケーション全体から `user` を用いてアクセス可能になります。

修正後の `UserIdentity` クラスを確認するため、ブラウザで URL `http://www.example.com/blog/index.php` にアクセスし、 `User` テーブルのユーザ名とパスワードでログインしてみてください。 [ブログデモ](http://www.yiiframework.com/demos/blog/) で提供されるデータベースを利用した場合、ユーザー名 `demo` 、パスワード `demo` でアクセスできるはずです。このブログシステムにはユーザ管理機能はありません。そのため、ユーザーはウェブインターフェースで、自身のアカウントを変更したり、新しいアカウントを作成出来ません。ユーザ管理機能はブログアプリケーションの将来の機能拡張として検討されるでしょう。

<div class="revision">$Id: prototype.auth.txt 702 2009-02-18 19:29:48Z qiang.xue $</div>
46 changes: 46 additions & 0 deletions docs/blog/ja/prototype.database.txt
@@ -0,0 +1,46 @@
データベースのセットアップ
===================

スケルトンアプリケーションを作り、データベースの設計が終わりました。 このセクションでは実際にブログデータベースを作成し、スケルトンアプリケーションとの接続を確立します。


データベースの作成
-----------------

データベースはSQLiteを使います。 Yiiのデータベースサポートは [PDO](http://www.php.net/manual/en/book.pdo.php) の上に構築されているため、 アプリケーションコードを変更することなく、MySQLやPostgreSQLといった異なるDBMSを利用することができます。

データベースファイルとして、ディレクトリ `/wwwroot/blog/protected/data` に `blog.db` を作ります。ディレクトリとファイルはともにWebサーバプロセスと SQLite により書き込み可能である必要があります。ここでは単に `/wwwroot/yii/demos/blog/protected/data/blog.db` にあるブログデモのデータベースファイルをコピーすることにします。もしくは `/wwwroot/yii/demos/blog/protected/data/schema.sqlite.sql` にある、SQLファイルを実行することでもデータベースを生成できます。

> Tip|ヒント: SQL文の実行には、 `sqlite3` コマンドラインツールを利用できます。 詳しくは [SQLite 公式ウェブサイト](http://www.sqlite.org/download.html)を参照してください。


データベースとの接続を確立する
--------------------------------

作ったスケルトンアプリケーションでブログデータベースを使うには、`/wwwroot/blog/protected/config/main.php` に保存されている PHP スクリプトで[アプリケーション初期構成](http://www.yiiframework.com/doc/guide/basics.application#application-configuration) を変更する必要があります。
このスクリプトはキーと値のペアで構成された連想配列を返します。 これらの値は[アプリケーションインスタンス](http://www.yiiframework.com/doc/guide/basics.application)を初期化するために使われます。

以下のようにアプリケーションの `components` プロパティに、 `db` という名前のエントリを追加します。

~~~
[php]
return array(
......
'components'=>array(
......
'db'=>array(
'class'=>'CDbConnection',
'connectionString'=>'sqlite:/wwwroot/blog/protected/data/blog.db',
),
),
......
);
~~~

上記の設定は、 [CDbConnection] クラスの `db` [アプリケーションコンポーネント](http://www.yiiframework.com/doc/guide/basics.application#application-component)を持ち、`connectionString` プロパティが `sqlite:/wwwroot/blog/protected/data/blog.db` に初期化されることを示します。

> Note|訳者注:yii-1.0.3以降のデモでは、'class'=>'CDbConnection'の記述はなくなっています。

この設定の場合、コードのどこからでも、`Yii::app()->db` を通じて DB コネクションオブジェクトにアクセスすることができます。`Yii::app()` は、エントリスクリプトで作成されたアプリケーションインスタンスを返すことに注意して下さい。DB コネクションのメソッドやプロパティに興味があれば、[クラスリファレンス|CDbConnection]を参照して下さい。 しかし、多くの場合このDBコネクションを直接利用することはありません。 そのかわりにいわゆる [ActiveRecord](http://www.yiiframework.com/doc/guide/database.ar) を利用してデータベースにアクセスします。

<div class="revision">$Id: prototype.database.txt 683 2009-02-16 05:20:17Z qiang.xue $</div>

0 comments on commit 0f48a6b

Please sign in to comment.