YII学习初级

Yii 的安装

一:从 Yii 的官方网站下载 Yii 框架

二:把下载的文件解压缩到一个 Web 可以访问的文件夹里

如果想验证 Yii 是否安装成功,只需要在浏览器中输入下面的 URL 就可以了。

http://hostname/path/to/yii/requirements/index.php


使用命令行工具 yiic 创建 web 应用

YiiRoot/framework/yiic webapp WebRoot/testdrive

注意:配置环境变量,否则无法运行命令行

也可以修改

Yii 自带的yiic.bat 找不到php.exe.
解决方法: 用notepad++打开yii/framework/yiic.bat,修改
if "%PHP_COMMAND%" == "" set PHP_COMMAND=php.exe
→→→ if "%PHP_COMMAND%" == "" set PHP_COMMAND=D:\wamp\php\php.exe

我的就是修改为
if "%PHP_COMMAND%" == "" set PHP_COMMAND=C:\wamp\bin\php\php5.4.3\php.exe

../../   注意路径的书写


盘符\wamp\bin\php\php5.3.5

访问:http://localhost/abc/index.php

创建控制器

在controllers文件夹下新建控制器,文件名为IndexControer,注意区分大小写;

控制器名与文件名相同,大小写也一致,这点和CI的稍有不同;

每个新建的类都需要extends一个主类   Controller;

class IndexController extends Controller{
public function actionIndex(){
echo ‘www.houdunwang.com’;
}

方法的书写规则:

每个方法明必须是actionIndex这样到类型,action小写,真正的方法名首字母大写;
访问:index.php?r=index/index
r=后面,第一个是控制器,第二个是方法, r就是路由route的缩写

配置默认控制器
默认访问:控制器SiteController下面的actionIndex方法
Config/main.php是主配置文件,在其中加入:
'defaultController' => 'Index',

载入视图


在控制器中:
$this->render();
$this->renderPartial();
建立文件夹需要根据控制器名字来建立,里面的文件名也就是render或
者renderPartial方法传递的名字
例如:
控制器是category,你就需要在view文件夹下建立一个category文件夹,
$this->render(‘index’);或者$this->renderPartial(‘index’);,需要
在里面建立index.php文件。

在控制器中:
$this->render();
会加载布局
$this->renderPartial();
不会加载布局(也不能载入框架自带的jquery等)

什么是布局
在views/layouts下面的文件是布局文件,公共区域,用render自动加载的文件
修改步骤
(1).views/layouts下面的,新建好布局文件。
(2).修改默认布局文件:
位置:

components/Controller.php
public $layout='//layouts/column1';

布局内容
上边是公用头部
中间<?php echo $content ?>
尾部是公共尾部

载入外部文件CSS,JS等(暂时有问题)
Css与js等一些文件放入assets里面,按照前后台分开,分别建立不同的文件夹。
          Yii::app()->request->baseUrl

可以用户 echo打印出来看看;

例如:
<?php echo Yii::app()->request->baseUrl;?>/assets/index/css/index.css

绝对地址:

var_dump(Yii::app()->request->getBaseUrl(true)); 


Yii::app()返回的是你在index.php里创建的CWebApplication实例。

在一次请求处理过程中,这是个唯一的实例。
Yii::app()主要负责一些全局性的功能模块。

如何分配给视图数据

这个和CI的数据分配有点儿像;

$data = array(
'title' => ‘扬子鳄',
'heading' => '欢迎年',
'message' => '我是程序员'
);
$this->render('index',$data);;

如何在视图中处理分配的数据


在Yii框架中,数据以对象的形式存在
<?php foreach ($article as $v):?>
<li><?php echo $v->title;?></li>
<?php endforeach;?>

扩展自定义函数
在protected目录下建立funtions.php文件
在单入口引入函数,即根目录下上的 index.php
require_once('./protected/functions.php');


一个控制器对应一个视图文件夹  

注意视图文件夹名和控制器之间的关系

比如 控制器:ArticleController 

控制器中的方法名: actionIndex

                                     actionAdd类似这样的写法
那么对应的视图文件夹名为:article



布局  layouts/   新建一个php文件


比如说新建一个blog.php

其实CSS文件可以在页面的任意位置加载,这就可以解决多个页面有相同的头部却有着不同的CSS文件的问题


事例文件:

网站页面的公共区域,比如头部和尾部
头部代码

<?php echo $content ?>


尾部代码


修改默认载入的布局layouts

 components/Controller.php   文件名

不能用 renderpartial  用 render




gii模块

打开模块

 config/  main.php     去掉关于gii的注释

访问GII 

r=gii/default/login

设置密码

'password'=>'Enter Your Password Here', 这里填写密码


使用GII创建后台模块

选择 Module Generator     //应该是最后一项

Module ID  填写: 模块名 这里我们填 admin,意为我们所建的后台模块名为admin


点击预览,创建就可以完成,这时在modules文件夹下就会多出一个admin文件夹

在创建时权限问题 、会造成失败 ,windows不存在问题

如何访问


首先添加模块:

'modules'=>array(
        // uncomment the following to enable the Gii tool
    
        'gii'=>array(
            'class'=>'system.gii.GiiModule',
            'password'=>'Enter Your Password Here',
            // If removed, Gii defaults to localhost only. Edit carefully to taste.
            'ipFilters'=>array('127.0.0.1','::1'),
        ),
               //添加新模块

              'admin'
    
    ),

r=admin/default/test

模块、控制器,方法


小物件  widget

表单的创建

 CActiveForm 类下面的方法
<?php $form = $this->beginWidget('CActiveForm') ?>


<?php echo $form->textField(模型,‘表单名’html属性)) ?>

问题:如何创建模型?表单名不能随便起,他和模型有关系
 <?php $this->endWidget() ?>

验证码的使用

在控制器中添加方法

public function actions(){
        return array (
                             ‘captcha’=> array(
                             ‘class’=> ‘CCatpchaAction’,
                              ‘height’=> 25,
                              ‘width’=>80,
                              ‘minLength’=>4,
                              ‘maxLength’=>4
                          )
  )


在视图中显示:


(1)普通写法:
<?php$this->widget('CCaptcha')?>
(2)带有点击刷新:
<?php$this-
>widget('CCaptcha',array('showRefreshButton'=>false,'clickableI
mage'=>true,'imageOptions'=>array('alt'=>'点击换图','title'=>'点
击换图','style'=>'cursor:pointer'))); ?>

注意:使用renderpartal不会点击刷新

修改核心类:
在framework/web/widgets/captcha/CCaptchaAction.php
修改run方法里面:

$this->renderImage($this->getVerifyCode(TRUE));


设置验证规则:
在loginForm.php的rules方法里:
array(‘name值’,’captcha’,’错误信息);
array(‘verify’,’ captcha’,’message’=>’验证码错误’);


触发验证:
$loginForm->attributes = $_POST[‘LoginForm’];

if
$loginForm->validate();


为模块设置单独布局文件
(1). 把protected里面的components文件夹复制一份,放到modules里
面的模块文件夹下面,不需要components里面的UserIdentity.php。
(2). 在模块下面的视图views文件夹里面建立layouts文件夹,里面放置
模块的布局文件,
(3).设置public $layout=‘//layouts/xx’;xx是自己的布局,去掉/
(4).如果后台模块没有公共区域直接在布局文件里<?php echo
$content?>


数据库连接配置

在main.php里面开启:


'db'=>array(
'connectionString' => 'mysql:host=localhost;dbname=blog',
'emulatePrepare' => true,//PDO扩展
'username' => 'root',
'password' => '123456',
'charset' => 'utf8',
'tablePrefix' => ’hd__'//定义表前缀,
‘enableParamLogging’=> TRUE//开启调试信息的SQL语句具体值
信息
),


用var_dump(Yii::app()->db);可以测试数据库是否连接成功;

创建表单:

<div class="form">
<?php echo CHtml::beginForm(); ?>
 
    <?php echo CHtml::errorSummary($model); ?>
 
    <div class="row">
        <?php echo CHtml::activeLabel($model,'username'); ?>
        <?php echo CHtml::activeTextField($model,'username') ?>
    </div>
 
    <div class="row">
        <?php echo CHtml::activeLabel($model,'password'); ?>
        <?php echo CHtml::activePasswordField($model,'password') ?>
    </div>
 
    <div class="row rememberMe">
        <?php echo CHtml::activeCheckBox($model,'rememberMe'); ?>
        <?php echo CHtml::activeLabel($model,'rememberMe'); ?>
    </div>
 
    <div class="row submit">
        <?php echo CHtml::submitButton('Login'); ?>
    </div>
 
<?php echo CHtml::endForm(); ?>
</div><!-- form -->
或者是:
<div class="form">
<?php $form=$this->beginWidget('CActiveForm'); ?>
 
    <?php echo $form->errorSummary($model); ?>
 
    <div class="row">
        <?php echo $form->label($model,'username'); ?>
        <?php echo $form->textField($model,'username') ?>
    </div>
 
    <div class="row">
        <?php echo $form->label($model,'password'); ?>
        <?php echo $form->passwordField($model,'password') ?>
    </div>
 
    <div class="row rememberMe">
        <?php echo $form->checkBox($model,'rememberMe'); ?>
        <?php echo $form->label($model,'rememberMe'); ?>
    </div>
 
    <div class="row submit">
        <?php echo CHtml::submitButton('Login'); ?>
    </div>
 
<?php $this->endWidget(); ?>
</div><!-- form -->

针对以上登录表单的模型:

定义模型

位置:protected/models/

模型是 CModel 或其子类的实例。模型用于保持数据以及与其相关的业务逻辑。

Yii 实现了两种类型的模型:表单模型和 Active Record。二者均继承于相同的基类 CModel。

取决于使用用户所输入数据的方式,我们可以创建两种类型的模型。 

1.  如果用户输入被收集、使用然后丢弃,我们应该创建一个 表单模型; 

2.   如果用户的输入被收集后要保存到数据库,我们应使用一个 Active Record 。 

两种类型的模型共享同样的基类 CModel ,它定义了表单所需的通用接口。

具体事例:

1. 定义模型类 

LoginForm.php

下面我们创建了一个 LoginForm 模型类用于在一个登录页中收集用户的输入。 
由于登录信息只被用于验证用户,并不需要保存,因此我们将 LoginForm 创建为一个 表单模型。


class LoginForm extends CFormModel
{
    public $username;
    public $password;
    public $rememberMe=false;
}
我们将这些成员变量称为 特性(attributes) 而不是 属性(properties),
以区别于普通的属性(properties)。 
特性(attribute)是一个主要用于存储来自用户输入或数据库数据的属性(propertiy)。

2. 声明验证规则 

一旦用户提交了他的输入,模型被填充,我们就需要在使用前确保用户的输入是有效的。 这是通过将用户的输入和一系列规则执行验证实现的。我们在 rules() 方法中指定这些验证规则, 此方法应返回一个规则配置数组。


class LoginForm extends CFormModel
{
    public $username;
    public $password;
    public $rememberMe=false;
 
    private $_identity;
 
    public function rules()
    {
        return array(
            array('username, password', 'required'),
            array('rememberMe', 'boolean'),
            array('password', 'authenticate'),
        );
    }
 
    public function authenticate($attribute,$params)
    {
        $this->_identity=new UserIdentity($this->username,$this->password);
        if(!$this->_identity->authenticate())
            $this->addError('password','错误的用户名或密码。');
    }
}

通过控制器载入表单:

 
$model=new LoginForm;

$this->render('login',array('model'=>$model));

实例化对应的模型,并传给对应的视图
















  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值