ホームページ  >  記事  >  バックエンド開発  >  5 日目 ThinkPHP のステップバイステップのクイック Web サイトのスプライシング (5)

5 日目 ThinkPHP のステップバイステップのクイック Web サイトのスプライシング (5)

WBOY
WBOYオリジナル
2016-08-08 09:22:25994ブラウズ

6月11日、晴れ。 「梅は歯が痛くなり、バナナは緑と窓の網戸に分けられます。長い一日を終えた後、私は無慈悲な考えを抱きながら眠り、子供たちが柳の花を捕まえるのを眺めます

1 、主に M メソッドを D メソッドに変更するためです

<?php
class LoginAction extends Action {
	function index() {
		// 配置页面显示内容
		$this->assign ( 'title', '后台管理系统' );
		$this->display ();
	}
	
	// 用户登录页面
	function login() {
		header ( "Content-Type:text/html; charset=utf-8" );
		
		$username=$_POST['username'];
		$password=md5($_POST['password']);
		
		$User = D ( "User" ); // 参数的User必须首字母大写,否则自动验证功能失效!
		if (! $User->create ()) {
			$this->error ( $User->getError () );
		} else {
			// 查找输入的用户名是否存在
			if ($User->where ( "username ='$username' AND password = '$password'" )->find ()) {
				session ( username, $username );
				$url = U ( '/Index/index/username/' . $username );
				redirect ( $url, 5, '跳转中...' );
			} else {
				$this->error ( '用户名或密码错误' );
			}
		}
}
その中で、<span>$User <spanmicrosoft yahei><spanmicrosoft yahei>=<spanmicrosoft yahei><spanmicrosoft yahei> D<spanmicrosoft yahei><spanmicrosoft yahei>(<span><spanmicrosoft yahei>'User'<spanmicrosoft yahei></spanmicrosoft></spanmicrosoft></span>);</spanmicrosoft></spanmicrosoft></spanmicrosoft></spanmicrosoft></spanmicrosoft></spanmicrosoft></span> User モデルをインスタンス化すると、現在のプロジェクトに Lib/Model/UserModel.class.php ファイルがインポートされ、UserModel クラスがインスタンス化されます。したがって、実際のコードは次と同等になる可能性があります:

<span style="font-family:Comic Sans MS;font-size:14px;">                               import('@.Model.UserModel');
                               $User = new UserModel();</span>
その後、create()でデータオブジェクトが作成されると、送信されたフォームデータが自動的に収集されます。 フォームをデータテーブルに書き込む前に、多くの場合、何らかのデータ検出 (送信されたユーザー名が要件を満たしているかどうか) と処理 (例の検証コードの比較など) が行われます。 create() メソッドは、データの自動検証と自動補完をサポートしています。一般に、M メソッドを使用してモデルをインスタンス化する場合、カスタム モデル クラスをインスタンス化することができず、自動検証および自動補完機能を使用することができないため、D メソッドを使用することをお勧めします。モデルクラスをインスタンス化します。 2、<span>$User </span><span>=</span><span> D</span><span>(</span><span>'User'</span><span>);</span>表示<span>实例化User模型,会导入当前项目下面的Lib/Model/UserModel.class.php文件,然后实例化UserModel类,所以,实际上的代码可能和下面的等效:</span>書かれた
カスタマイズされたユーザーモデルクラスadmin/Lib/Model/UserModel.class うーん定義形式は次のとおりです:

<?php
/*
 * 自定义User模型类
 * 功能:1.完成自动验证功能
 */
class UserModel extends Model{		
	//自动验证成员属性(二维数组,每个数组代表一个验证规则)
	//array(&#39;验证字段&#39;,&#39;验证规则&#39;,&#39;错误提示&#39;,&#39;验证条件&#39;,&#39;附加规则&#39;,&#39;验证时间&#39;),
	//验证字段:表单中的字段名称,也可以是表单中的一些辅助字段,例如验证码,重复密码等
	//验证规则:
	//错误提示:出现错误,抛出一个什么样的提示告知用户
	//验证条件:参考手册6.15 (共有0,1,2三种值)
	//附加规则:比如使用正则表达式验证,callback函数验证等,默认使用正则验证
	//验证时间:1.新增时验证 2.编辑时验证 3.全部清况下验证
	protected $_validate=array(
		array(&#39;username&#39;,		&#39;require&#39;,		&#39;用户名必须非空&#39;),
		array(&#39;username&#39;,		&#39;callback_checklen&#39;,	&#39;用户名过长或过短&#39;,	0,	&#39;callback&#39;),
		array(&#39;password&#39;,		&#39;require&#39;,		&#39;密码必须非空&#39;	),
		array(&#39;repassword&#39;,	&#39;require&#39;,		&#39;请重复输入密码&#39;		),
	//	array(&#39;password&#39;,		&#39;repassword&#39;,&#39;两次输入的密码不一致,请重新输入&#39;,		0,	&#39;confirm&#39;),
		array(&#39;verify&#39;,&#39;require&#39;,&#39;验证码必须填写!&#39;),
		array(&#39;verify&#39;,&#39;callback_checkCode&#39;,&#39;验证码错误!&#39;,0,&#39;callback&#39;),  //使用回调函数checkCode
	);
	
	//字段长度验证回调函数(ThinkPHP会自动帮我们传递参数)
	function callback_checklen($data){
		if(strlen($data)>15 || strlen($data)<5){
			return false;
		}
		return true;
	}
	//验证码回调函数(ThinkPHP会自动帮我们传递参数)
	function callback_checkCode($data){
		if(md5($data)!=$_SESSION[&#39;verify&#39;]){
			return false;
		}
		return true;
	}
	
	//自动完成,在create时自动执行
	//array(&#39;填充字段&#39;,&#39;填充内容&#39;,&#39;填充条件&#39;,&#39;附加规则&#39;);
	//填充字段 
	protected $_auto=array(
			array(&#39;password&#39;,&#39;md5&#39;,3,&#39;function&#39;),
			array(&#39;ip&#39;,&#39;callback_returnip&#39;,1,&#39;callback&#39;),
			array(&#39;createtime&#39;,&#39;time&#39;,1,&#39;function&#39;),
	); 
	
	function callback_returnip(){
			return $_SERVER[&#39;REMOTE_ADDR&#39;];	
	}
}
?>
説明 パスワードの確認や確認コードなどの補助フィールド。フィールドに関係のない個別の検証ルールがある場合、たとえば、有効期限のルールはフォーム フィールドに関係なく、自由に設定できます。 フィールドマッピングが定義されている場合、ここでの検証フィールド名はフォームフィールドではなく実際のデータテーブルフィールドである必要があります。
検証ルール: 検証される (必須) ルールは追加ルールと組み合わせる必要があります。定期検証用の追加ルールが使用される場合、システムには一般的に使用される定期検証ルールも組み込まれており、これを検証として直接使用できます。以下を含むルール: 必須フィールドは、電子メール アドレス、URL URL アドレス、通貨、および数値である必要があります。 プロンプト メッセージ: (必須) 検証失敗後のプロンプト メッセージを定義するために使用されます。

検証条件: (オプション) 以下の状況を含む: Model::EXISTS_VALIDATE または 0 フィールドが存在するかどうかを検証します (デフォルト) Model::MUST_VALIDATE または 1検証する必要があります Model::VALUE_VALIDATE または 2 値が空でない場合に検証します 3. 書き込みデータベーステーブルthink_news





array(     
        array(验证字段1,验证规则,错误提示,[验证条件,附加规则,验证时间]),    
        array(验证字段2,验证规则,错误提示,[验证条件,附加规则,验证时间]),    
 ...... );

5. adminTplIndexindex.htmlを変更します

ニュースの編集ボタンを次のように変更します。

CREATE TABLE `think_news` (
  
	`id` int(11) NOT NULL AUTO_INCREMENT,
  
	`author` int(11) NOT NULL,
 
	`subject` varbinary(256) NOT NULL,
 
	`createtime` int(11) NOT NULL,
 
	`lastmodifytime` int(11) NOT NULL,
  
	`message` mediumtext NOT NULL,
  
	 PRIMARY KEY (`id`)

) ENGINE=MyISAM DEFAULT CHARSET=utf8;
<spanmicrosoft yahei> このうち、'__PUBLIC__' は <spanmicrosoft yahei></spanmicrosoft></spanmicrosoft><spanmicrosoft yahei>site のパブリックディレクトリを表し、<code>'__URL__' は現在のモジュールの URL アドレスを表します 6. adminLibActionIndexAction.class.php に関数 news
 <li><a class="shortcut-button" href="__URL__/news"><span> <img src="__PUBLIC__/Images/admin/icons/pencil_48.png" alt="icon" /><br />
        编辑新闻 </span></a></li>
を追加します

上記では、ThinkPHP のステップバイステップのクイック Web サイトのスプライシング (5) の 5 日目を、関連する内容も含めて紹介しています。PHP チュートリアルに興味のある友人の参考になれば幸いです。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。