<?xml version="1.0" encoding="UTF-8"?>
<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/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Jansfer - 长风破浪会有时，直挂云帆济沧海 &#187; CakePHP</title>
	<atom:link href="http://www.82cs.com/category/%e6%8a%80%e6%9c%af/cakephp-%e6%8a%80%e6%9c%af/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.82cs.com</link>
	<description>头顶着“80后”的光环，脚踏实地一步步向前进。</description>
	<lastBuildDate>Wed, 01 Feb 2012 01:31:10 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>CakePHP中Cache相关的设置</title>
		<link>http://www.82cs.com/201106/02/cakephp-related-settings-in-the-cache/</link>
		<comments>http://www.82cs.com/201106/02/cakephp-related-settings-in-the-cache/#comments</comments>
		<pubDate>Thu, 02 Jun 2011 07:13:27 +0000</pubDate>
		<dc:creator>Jansfer</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[cache]]></category>
		<category><![CDATA[cacheAction]]></category>
		<category><![CDATA[cakephp]]></category>
		<category><![CDATA[persistModel]]></category>

		<guid isPermaLink="false">http://www.82cs.com/201106/02/cakephp-related-settings-in-the-cache/</guid>
		<description><![CDATA[CakePHP的MVC三部分都有一些和Cache相关的设置： 如Model里的cacheQueries属性，如果此属性被设置为true，那么假设我们在一次请求里，重复执行某条SELECT SQL，那么在第一次查询的时候其结果会被缓存（保存到一个数组里），以后重复的查询将会直接得到结果。 Controller里的cacheAction必须满足三个条件才能生效： 1. 在配置文件core.php里设置：Configure::write(&#8216;Cache.check&#8217;, true); 2. 在控制器中加载Cache助手：var $helpers = array(&#8216;Cache&#8217;); （可以统一放在app_controller.php里） 3. 在控制器中设定$cacheAction属性，如：var $cacheAction = true; 或者 var $cacheAction = &#34;1 hour&#34;; 注意：设定$cacheAction的时候，可以使用数组的方式，如： var $cacheAction = array( &#160;&#160;&#160; &#8216;view/1&#8242; =&#62; 123456, &#160;&#160;&#160; &#8216;view/2&#8242; =&#62; &#8217;1 year&#8217; ); Controller里的persistModel属性比较有趣，如果设置为true，那么在此Controller里用到的Model会被序列化后缓存，据说从一个序列化后的缓存文件里加载数据，然后反序列化后得到说要的对象，比直接用new实例化有效率。 View的模板里可以使用&#60;cake:nocache&#62;&#60;/cake:nocache&#62;把不需要缓存的部分隔出来。不过并不是所有的变量都可以放在&#60;cake:nocache&#62;&#60;/cake:nocache&#62;之间，你只要看看实际生成的缓存文件就应该明白，视图缓存文件的原理是生成一个渲染后的php文件，并且缓存文件里面附带有controller的基本信息，在缓存有效的时间内，同样的请求会跳过action的执行，直接使用视图缓存。所以如果你在action里set出来的视图变量就不可能放在cake:nocache里，action并不执行，这样的变量不会生效，如果你一定要实现类似的功能，可以尝试使用requestAction方法。 另外，Model里在执行save和del方法的时候，会通过钩子方法更新缓存文件。 参考链接 ================== View里的renderElement方法已经不推荐使用了，取而代之的是使用element方法，现在似乎流行直接用名词做方法名，似乎说法是这样更DSL，不过我现在还不太习惯这样的方式。 ================== 尽量避免在controller中使用requestAction，而应该尽可能的结合view中的element使用requestAction。 Today on history:2009:&#160;&#160;有效防治晕车七法(0)2009:&#160;&#160;最近的生活(0)2008:&#160;&#160;一个中国留学生在德国所感受到的Linux氛围(0)2008:&#160;&#160;网站被百度封了(0)]]></description>
			<content:encoded><![CDATA[<p>CakePHP的MVC三部分都有一些和Cache相关的设置：   <br />如Model里的cacheQueries属性，如果此属性被设置为true，那么假设我们在一次请求里，重复执行某条SELECT SQL，那么在第一次查询的时候其结果会被缓存（保存到一个数组里），以后重复的查询将会直接得到结果。    <br />Controller里的cacheAction必须满足三个条件才能生效：    <br />1. 在配置文件core.php里设置：Configure::write(&#8216;Cache.check&#8217;, true);    <br />2. 在控制器中加载Cache助手：var $helpers = array(&#8216;Cache&#8217;); （可以统一放在app_controller.php里）    <br />3. 在控制器中设定$cacheAction属性，如：var $cacheAction = true; 或者 var $cacheAction = &quot;1 hour&quot;;    <br />注意：设定$cacheAction的时候，可以使用数组的方式，如：    <br />var $cacheAction = array(    <br />&#160;&#160;&#160; &#8216;view/1&#8242; =&gt; 123456,    <br />&#160;&#160;&#160; &#8216;view/2&#8242; =&gt; &#8217;1 year&#8217;    <br />);    <br />Controller里的persistModel属性比较有趣，如果设置为true，那么在此Controller里用到的Model会被序列化后缓存，据说从一个序列化后的缓存文件里加载数据，然后反序列化后得到说要的对象，比直接用new实例化有效率。    <br />View的模板里可以使用&lt;cake:nocache&gt;&lt;/cake:nocache&gt;把不需要缓存的部分隔出来。不过并不是所有的变量都可以放在&lt;cake:nocache&gt;&lt;/cake:nocache&gt;之间，你只要看看实际生成的缓存文件就应该明白，视图缓存文件的原理是生成一个渲染后的php文件，并且缓存文件里面附带有controller的基本信息，在缓存有效的时间内，同样的请求会跳过action的执行，直接使用视图缓存。所以如果你在action里set出来的视图变量就不可能放在cake:nocache里，action并不执行，这样的变量不会生效，如果你一定要实现类似的功能，可以尝试使用requestAction方法。    <br />另外，Model里在执行save和del方法的时候，会通过钩子方法更新缓存文件。    <br /><a target="_blank" href="http://book.cakephp.org/view/213/cache">参考链接</a>    <br />==================    <br />View里的renderElement方法已经不推荐使用了，取而代之的是使用element方法，现在似乎流行直接用名词做方法名，似乎说法是这样更DSL，不过我现在还不太习惯这样的方式。    <br />==================    <br />尽量避免在controller中使用requestAction，而应该尽可能的结合view中的element使用requestAction。</p>
<h2>Today on history:</h2><ol><li>2009:&nbsp;&nbsp;<a href='http://www.82cs.com/200906/02/%e6%9c%89%e6%95%88%e9%98%b2%e6%b2%bb%e6%99%95%e8%bd%a6%e4%b8%83%e6%b3%95/' title='Permanent Link to 有效防治晕车七法'>有效防治晕车七法(0)</a></li><li>2009:&nbsp;&nbsp;<a href='http://www.82cs.com/200906/02/%e6%9c%80%e8%bf%91%e7%9a%84%e7%94%9f%e6%b4%bb/' title='Permanent Link to 最近的生活'>最近的生活(0)</a></li><li>2008:&nbsp;&nbsp;<a href='http://www.82cs.com/200806/02/a-chinese-student-in-germany/' title='Permanent Link to 一个中国留学生在德国所感受到的Linux氛围'>一个中国留学生在德国所感受到的Linux氛围(0)</a></li><li>2008:&nbsp;&nbsp;<a href='http://www.82cs.com/200806/02/%e7%bd%91%e7%ab%99%e8%a2%ab%e7%99%be%e5%ba%a6%e5%b0%81%e4%ba%86/' title='Permanent Link to 网站被百度封了'>网站被百度封了(0)</a></li></ol>]]></content:encoded>
			<wfw:commentRss>http://www.82cs.com/201106/02/cakephp-related-settings-in-the-cache/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cakephp 执行主要流程</title>
		<link>http://www.82cs.com/201012/20/cakephp-implementation-of-major-process/</link>
		<comments>http://www.82cs.com/201012/20/cakephp-implementation-of-major-process/#comments</comments>
		<pubDate>Mon, 20 Dec 2010 08:12:04 +0000</pubDate>
		<dc:creator>Jansfer</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[技术]]></category>
		<category><![CDATA[cakephp]]></category>
		<category><![CDATA[流程]]></category>

		<guid isPermaLink="false">http://www.82cs.com/?p=2951</guid>
		<description><![CDATA[加载基本文件&#160; cake/basics.php 里面定义了常用的方法以及时间常量&#160; $TIME_START = getMicrotime(); 记录开始执行时间&#160; cake/config/paths.php 里面定义一些基本路径&#160; cake/lib/object.php cake的基本类&#160; cake/lib/inflector.php 这里主要是处理单复数，带下划开命名以及驼峰式命名&#160; cake/lib/configure.php 里面提供文件配置的读写，路径的设置，以及加载文件的方法&#160; cake/lib/cache.php 缓存的操作&#160; Configure::getInstance(); 开始对项目的配置&#160; config/core.php 项目的配置文件&#160; config/bootstrap.php 项目的入口文件&#160; App::import(&#8216;Core&#39;, array(&#8216;Dispatcher&#39;)); 加载核心，开始做正事了，GO&#160; $Dispatcher = new Dispatcher();&#160; $Dispatcher-&#62;dispatch($url); 开始执行，通过对当前的url解析，如果你设置了压缩Js、Css，则对这些文件压缩输出，如果你对页面设置缓存，则直接输出缓存页面，最后查找相应的Controller。如果找不到，则进行相应的错误处理。&#160; 实例化当前Controller，确定视图路径，实例化Component，获得仅当前Controller[不包含父类Controller]的方法&#160; 对当前Controller中私有方法、带admin路由或者带prefix的方法进行保护，不允许直接访问&#160; 设置当前Controller的基本属性，如base、here、webroot、plugin、params、action、 passedArgs[array_merge($this-&#62;params[&#39;pass&#39;],$this-&#62;params[&#39;named&#39;])]&#160; 调用Controller中的constructClasses方法&#160; 执行__mergeVars方法，该方法对父子类的components、helpers、uses等属性进行特殊合并处理&#160; 调用Component-&#62;init()方法，载入用户设置的系列components(Session为默认)，并默认enabled属性为true。（该属性可以后期在beforeFilter里修改）&#160; 调用Component-&#62;initialize()方法，若系列components里有这个initialize方法并且该component 的enabled为true，则调用该components-&#62;initialize方法（这里enabled用户好像无法通过 Controller设置，只能为true）&#160; 调用当前Controller中beforeFilter()方法，这个方法是个好东西^_^&#160; 调用Component-&#62;startup()方法，同样，若系列components里有这个startup方法并且该component的 enabled为true，则调用该components-&#62;startup方法（这里enabled倒是可以通过beforeFilter设 置），该方法也是components里最重要的方法，比如Auth就在这里大作文章^_^&#160; 开始执行当前Controller里的Action方法&#160; 如果设置autoRender为true，则根据调用当前Controller的render()方法，否则返回或输出Action方法的返回的数据&#160; 调用Controller的render()方法时，先调用当前Controller中的beforeRender()方法&#160; 加载视图渲染类&#160; 调用Component-&#62;beforeRender()方法，同样，若系列components里有这个beforeRender方法并且该 component的enabled为true，则调用该components-&#62;beforeRender方法（这里enabled可以通过 beforeFilter设置）&#160; 获取当前Model的数据验证错误信息，给View使用&#160; 调用View的render()方法&#160; [...]]]></description>
			<content:encoded><![CDATA[<p>加载基本文件&nbsp;<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; " /><br />
	cake/basics.php 里面定义了常用的方法以及时间常量&nbsp;<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; " /><br />
	$TIME_START = getMicrotime(); 记录开始执行时间&nbsp;<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; " /><br />
	cake/config/paths.php 里面定义一些基本路径&nbsp;<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; " /><br />
	cake/lib/object.php cake的基本类&nbsp;<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; " /><br />
	cake/lib/inflector.php 这里主要是处理单复数，带下划开命名以及驼峰式命名&nbsp;<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; " /><br />
	cake/lib/configure.php 里面提供文件配置的读写，路径的设置，以及加载文件的方法&nbsp;<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; " /><br />
	cake/lib/cache.php 缓存的操作&nbsp;<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; " /><br />
	<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; " /><br />
	Configure::getInstance(); 开始对项目的配置&nbsp;<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; " /><br />
	config/core.php 项目的配置文件&nbsp;<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; " /><br />
	config/bootstrap.php 项目的入口文件&nbsp;<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; " /><br />
	<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; " /><br />
	App::import(&lsquo;Core&#39;, array(&lsquo;Dispatcher&#39;)); 加载核心，开始做正事了，GO&nbsp;<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; " /><br />
	$Dispatcher = new Dispatcher();&nbsp;<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; " /><br />
	$Dispatcher-&gt;dispatch($url); 开始执行，通过对当前的url解析，如果你设置了压缩Js、Css，则对这些文件压缩输出，如果你对页面设置缓存，则直接输出缓存页面，最后查找相应的Controller。如果找不到，则进行相应的错误处理。&nbsp;<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; " /><br />
	实例化当前Controller，确定视图路径，实例化Component，获得仅当前Controller[不包含父类Controller]的方法&nbsp;<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; " /><br />
	对当前Controller中私有方法、带admin路由或者带prefix的方法进行保护，不允许直接访问&nbsp;<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; " /><br />
	设置当前Controller的基本属性，如base、here、webroot、plugin、params、action、 passedArgs[array_merge($this-&gt;params[&#39;pass&#39;],$this-&gt;params[&#39;named&#39;])]&nbsp;<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; " /><br />
	调用Controller中的constructClasses方法&nbsp;<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; " /><br />
	执行__mergeVars方法，该方法对父子类的components、helpers、uses等属性进行特殊合并处理&nbsp;<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; " /><br />
	调用Component-&gt;init()方法，载入用户设置的系列components(Session为默认)，并默认enabled属性为true。（该属性可以后期在beforeFilter里修改）&nbsp;<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; " /><br />
	调用Component-&gt;initialize()方法，若系列components里有这个initialize方法并且该component 的enabled为true，则调用该components-&gt;initialize方法（这里enabled用户好像无法通过 Controller设置，只能为true）&nbsp;<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; " /><br />
	调用当前Controller中beforeFilter()方法，这个方法是个好东西^_^&nbsp;<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; " /><br />
	调用Component-&gt;startup()方法，同样，若系列components里有这个startup方法并且该component的 enabled为true，则调用该components-&gt;startup方法（这里enabled倒是可以通过beforeFilter设 置），该方法也是components里最重要的方法，比如Auth就在这里大作文章^_^&nbsp;<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; " /><br />
	开始执行当前Controller里的Action方法&nbsp;<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; " /><br />
	如果设置autoRender为true，则根据调用当前Controller的render()方法，否则返回或输出Action方法的返回的数据&nbsp;<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; " /><br />
	调用Controller的render()方法时，先调用当前Controller中的beforeRender()方法&nbsp;<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; " /><br />
	加载视图渲染类&nbsp;<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; " /><br />
	调用Component-&gt;beforeRender()方法，同样，若系列components里有这个beforeRender方法并且该 component的enabled为true，则调用该components-&gt;beforeRender方法（这里enabled可以通过 beforeFilter设置）&nbsp;<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; " /><br />
	获取当前Model的数据验证错误信息，给View使用&nbsp;<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; " /><br />
	调用View的render()方法&nbsp;<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; " /><br />
	载入相关Helper助手&nbsp;<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; " /><br />
	调用Helper的beforeRender()方法&nbsp;<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; " /><br />
	调用Helper的afterRender()方法&nbsp;<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; " /><br />
	相关的缓存处理&nbsp;<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; " /><br />
	执行renderLayout()方法，当然前提你要允许渲染布局，默认为default.ctp布局文件&nbsp;<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; " /><br />
	调用Helper的beforeLayout()方法&nbsp;<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; " /><br />
	调用Helper的afterLayout()方法&nbsp;<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; " /><br />
	调用Component-&gt;shutdown()方法，同样，若系列components里有这个shutdown方法并且该component的 enabled为true，则调用该components-&gt;shutdown方法（这里enabled可以通过beforeFilter设置）&nbsp;<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; " /><br />
	执行当前Controller里的afterFilter方法，这里你可以对视图的输出内容($controller-&gt;output)做一些处理&nbsp;<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; " /><br />
	返回或输出视图数据。&nbsp;<br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; " /><br />
	流程完毕。</p>
<h2>Today on history:</h2><ol><li>2006:&nbsp;&nbsp;<a href='http://www.82cs.com/200612/20/archive_323/' title='Permanent Link to Opera新手上路之第一次使用Opera：三分钟玩转Opera'>Opera新手上路之第一次使用Opera：三分钟玩转Opera(0)</a></li></ol>]]></content:encoded>
			<wfw:commentRss>http://www.82cs.com/201012/20/cakephp-implementation-of-major-process/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>5个基于CakePHP的开源CMS</title>
		<link>http://www.82cs.com/201009/07/5-open-source-cms-based-on-cakephp/</link>
		<comments>http://www.82cs.com/201009/07/5-open-source-cms-based-on-cakephp/#comments</comments>
		<pubDate>Tue, 07 Sep 2010 07:06:32 +0000</pubDate>
		<dc:creator>Jansfer</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[cakephp]]></category>
		<category><![CDATA[CMS]]></category>

		<guid isPermaLink="false">http://www.82cs.com/?p=2865</guid>
		<description><![CDATA[前言：CakePHP is great rapid development php framework. CakePHP allows you to create applications with ease. But in case you CakePHP lover need to create simple sites or applcations, maybe you considering to use one of the CakePHP based CMS than developed yourself from scratch. 1、Wildflower Wildflower内容管理系统和应用平台的基础是CakePHP的框架和jQuery的 Javascript库，是标准的开放源代码和用户友好界面。 Features特征 评论完全与Akismet垃圾邮件的检查。 更多文章和评论模型单元测试。 包括最新的CakePHP的- r7117。 网页中包含的内容修改和工作预览。 增强错误修正。 2、Croogo Croogo is [...]]]></description>
			<content:encoded><![CDATA[<p>前言：CakePHP is great <strong>rapid development php framework</strong>. CakePHP allows you to create applications with ease. But in case you CakePHP lover need to create simple sites or applcations, maybe you considering to use one of the <strong>CakePHP based CMS</strong> than developed yourself from scratch.</p>
<p>1、<a target="_blank" rel="nofollow" href="http://wf.klevo.sk/" target="_blank">Wildflower</a></p>
<p><img src="http://www.82cs.com/wp-content/uploads/auto_save_image/2010/09/070633fYo.gif" alt="" width="219" height="82" /></p>
<p>Wildflower内容管理系统和应用平台的基础是CakePHP的框架和jQuery的 Javascript库，是标准的开放源代码和用户友好界面。</p>
<p><strong>Features特征</strong></p>
<ul>
<li>评论完全与Akismet垃圾邮件的检查。</li>
<li>更多文章和评论模型单元测试。</li>
<li>包括最新的CakePHP的- r7117。</li>
<li>网页中包含的内容修改和工作预览。</li>
<li>增强错误修正。</li>
</ul>
<p>2、<a target="_blank" rel="nofollow" href="http://croogo.org/" target="_blank">Croogo</a></p>
<p>Croogo is a CakePHP powered Content Management System.</p>
<p><a href="http://www.82cs.com/wp-content/uploads/auto_save_image/2010/09/0706404Yj.png" rel="lightbox[2865]"><img title="croogo-600x394" src="http://www.82cs.com/wp-content/uploads/auto_save_image/2010/09/0706404Yj.png" alt="croogo-600x394" width="600" height="394" /></a></p>
<p>特征</p>
<ul>
<li>内容类型：您可以创建自己的内容类型</li>
<li>博客</li>
<li>节点</li>
<li>页</li>
<li> 所见即所得编辑器</li>
<li> 附件（用于图像和文件上传）</li>
<li> 评论</li>
<li> 嵌套评论</li>
<li> 电子邮件通知</li>
<li> Moderation 缓和</li>
<li> 垃圾邮件防护（需要Akismet API密钥）</li>
<li> captcha（需要Recaptcha API密钥）</li>
<li> 聚合：RSS资讯</li>
<li> 个别内容类型</li>
<li> 所有推广项目</li>
<li> 搜索引擎优化</li>
<li> 搜索引擎友好的URL</li>
<li> 完全控制meta标签</li>
<li> 自定义字段</li>
<li> 菜单管理器</li>
<li> 支持块</li>
<li> 联系方式</li>
<li> 邮件归档</li>
<li> 文件管理器</li>
<li> 多用户</li>
<li> ACL的管理（权限）</li>
<li> 主题</li>
<li> 基于Web的管理</li>
<li> MIT许可证</li>
</ul>
<p>3、<a target="_blank" rel="nofollow" href="http://cupcakecms.sourceforge.net/index.html" target="_blank">CupCake CMS</a></p>
<p><img src="http://www.82cs.com/wp-content/uploads/auto_save_image/2010/09/070641VmG.png" alt="" width="359" height="86" /></p>
<p>CupCake CMS is an Open Source Content Management System built using CakePHP. 其目的是提供一个简单的网页设计师和易于部署工具来管理内容中小型无需编程即可完成所有的代码.通过简单易用的界面和所见即所得的编辑器（FCKEditor），内容可以创建和更新单行网站，通过授权的用户无需学习HTML的需要。</p>
<p>对于那些对其他开源CMS应用熟悉，CupCake是一种轻便的设计为导向的内容管理系统，这意味着对网站的快速部署。</p>
<p>4、<a target="_blank" rel="nofollow" href="http://cakeforge.org/projects/lumad-cms/">Lumad CMS</a></p>
<p>Lumad CMS是一个开放源码的内容管理平台，为开发者提供了一种快速，简单的接口设计，管理小型网站的意思。 伊塔€™š不是一个社区驱动像Drupal，也不是工作流驱动，企业如Typo3 CMS。</p>
<ul>
<li>发展现状：<a target="_blank" rel="nofollow" href="http://cakeforge.org/softwaremap/trove_list.php?form_cat=8">2 – Pre-Alpha</a></li>
<li>环境： <a target="_blank" rel="nofollow" href="http://cakeforge.org/softwaremap/trove_list.php?form_cat=237">Web Environment</a></li>
<li>目标用户： 开发人员 ， 最终用户</li>
<li>许可： 麻省理工学院/ X联盟许可证</li>
<li>自然语言： 英语</li>
<li>操作系统： 操作系统无关</li>
<li>编程语言：PHP</li>
<li>主题： 动态内容 ， 网站管理</li>
</ul>
<p>5、<a target="_blank" rel="nofollow" href="http://cakeforge.org/projects/ovencms/">OvenCMS</a></p>
<p>OvenCMS是一个开源的CMS，由CakePHP的框架和jQuery JavaScript库建成。OvenCMS完全模块化，有工作插件（模块）很多。</p>
<h4>结束语</h4>
<p>本文来自：<a target="_blank" href="http://planetcakephp.org/aggregator/items/3543-5-cakephp-based-content-managament-system">5 CakePHP based Content Managament System</a> 翻译</p>
<p><a target="_blank" href="http://blog.lixiphp.com/top-5-cakephp-cms/" target="_blank">来源</a></p>
<h2>Today on history:</h2><ol><li>2007:&nbsp;&nbsp;<a href='http://www.82cs.com/200709/07/archive_502/' title='Permanent Link to RPM打包技术与典型SPEC文件分析'>RPM打包技术与典型SPEC文件分析(0)</a></li><li>2006:&nbsp;&nbsp;<a href='http://www.82cs.com/200609/07/archive_255/' title='Permanent Link to 祺祺越来越调皮了'>祺祺越来越调皮了(0)</a></li><li>2006:&nbsp;&nbsp;<a href='http://www.82cs.com/200609/07/archive_254/' title='Permanent Link to 搏饼的规则'>搏饼的规则(0)</a></li><li>2006:&nbsp;&nbsp;<a href='http://www.82cs.com/200609/07/archive_76/' title='Permanent Link to 厦门快速公交上路'>厦门快速公交上路(0)</a></li></ol>]]></content:encoded>
			<wfw:commentRss>http://www.82cs.com/201009/07/5-open-source-cms-based-on-cakephp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>在Cakephp中使用i18n本地化程序实际多语言，并使用poedit编辑语言文件</title>
		<link>http://www.82cs.com/201008/16/using-i18n-in-cakephp-real-multi-language-localization-process-and-edit-the-language-file-to-use-poedit/</link>
		<comments>http://www.82cs.com/201008/16/using-i18n-in-cakephp-real-multi-language-localization-process-and-edit-the-language-file-to-use-poedit/#comments</comments>
		<pubDate>Mon, 16 Aug 2010 02:21:33 +0000</pubDate>
		<dc:creator>Jansfer</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[cakephp]]></category>
		<category><![CDATA[i18n]]></category>
		<category><![CDATA[poedit]]></category>
		<category><![CDATA[多语言]]></category>

		<guid isPermaLink="false">http://www.82cs.com/?p=2823</guid>
		<description><![CDATA[Cakephp的很强大的i18n功能就是用来实现本地化和国际化的。他通过使用语言配置文件使得程序能够很好的适应变化进行本地化。通过新建locale/chi/LC_MESSAGES/default.po文件，并指定语言选项为“chi”实现。本文中说的就是如何实现这个本地化过程，当然本文中的poedit并不是必须的，但是他可以使得工作效率更高。 一、关于i18n和L10n 这2个东东其实头一次我看到的时候也是一头雾水，但是经过百度的一通搜索，得出的结论就是，不管是几个n，最终的目的就是实现程序本地化就好了，说白了，就是由很多的语言配置文件，反正我是这么理解的。大家也可以去看看， http://baike.baidu.com/view/372835.htm 这里有很详细的说明。 二、在Cakephp里面，实现本地化的方法 目前为止，有2种配置方法。 2.1 方法一 在config/core.php中使用configure::write来制定语言文件。 Configure::write(’Config.language’,”chi”); 2.2 方法二 官方说明： http://book.cakephp.org/view/162/Localizing-Your-Application 貌似很复杂的说哦。 view source print ? 01.App::import(&#8216;Core&#8217;, &#8216;l10n&#8217;); 02.class TestsController extends AppController{ 03.  $name=”Tests”; 04.  function test_function(){ 05.    $this-&#62;L10n-&#62;new L10n(); 06.    $this-&#62;L10n-&#62;get(“chi”); 07.    &#8230;.. 08.  } 09.} 2.3 做上边设置改动后需要做的： 当然在上面做修改后，还需要修改对应的ctp文件等哦， 所有的直接输出字符串，没有返回值的地方像这样： view source print ? 1.__(“english”); 间接输出字符串，有返回的地方： view source print ? [...]]]></description>
			<content:encoded><![CDATA[<table cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td id="postmessage_11235959">
Cakephp的很强大的i18n功能就是用来实现本地化和国际化的。他通过使用语言配置文件使得程序能够很好的适应变化进行本地化。通过新建locale/chi/LC_MESSAGES/default.po文件，并指定语言选项为“chi”实现。本文中说的就是如何实现这个本地化过程，当然本文中的poedit并不是必须的，但是他可以使得工作效率更高。<br />
<strong><span style="color: #ff0000;">一、关于i18n和L10n</span></strong><br />
这2个东东其实头一次我看到的时候也是一头雾水，但是经过百度的一通搜索，得出的结论就是，不管是几个n，最终的目的就是实现程序本地化就好了，说白了，就是由很多的语言配置文件，反正我是这么理解的。大家也可以去看看，<br />
<a target="_blank" href="http://baike.baidu.com/view/372835.htm" target="_blank"><span style="color: #0000ff;">http://baike.baidu.com/view/372835.htm</span></a><br />
这里有很详细的说明。<br />
<strong><span style="color: #ff0000;">二、在Cakephp里面，实现本地化的方法</span></strong><br />
目前为止，有2种配置方法。<br />
<strong>2.1 方法一</strong><br />
在config/core.php中使用configure::write来制定语言文件。<br />
Configure::write(’Config.language’,”chi”);<br />
<strong>2.2 方法二<br />
</strong>官方说明：<br />
<a target="_blank" href="http://book.cakephp.org/view/162/Localizing-Your-Application" target="_blank"><span style="color: #0000ff;">http://book.cakephp.org/view/162/Localizing-Your-Application</span></a></p>
<p>貌似很复杂的说哦。<br />
<a target="_blank" href="http://newsn.net/20090525/472.html/comment-page-1#viewSource" target="_blank">view source</a></p>
<p><a target="_blank" href="http://newsn.net/20090525/472.html/comment-page-1#printSource" target="_blank">print</a><br />
<a target="_blank" href="http://newsn.net/20090525/472.html/comment-page-1#about" target="_blank">?</a><br />
01.App::import(&#8216;Core&#8217;, &#8216;l10n&#8217;);<br />
02.class TestsController extends AppController{<br />
03.  $name=”Tests”;<br />
04.  function test_function(){<br />
05.    $this-&gt;L10n-&gt;new L10n();<br />
06.    $this-&gt;L10n-&gt;get(“chi”);<br />
07.    &#8230;..<br />
08.  }<br />
09.}<br />
<strong>2.3 做上边设置改动后需要做的：</strong><br />
当然在上面做修改后，还需要修改对应的ctp文件等哦，<br />
所有的直接输出字符串，没有返回值的地方像这样：<br />
<a target="_blank" href="http://newsn.net/20090525/472.html/comment-page-1#viewSource" target="_blank">view source</a></p>
<p><a target="_blank" href="http://newsn.net/20090525/472.html/comment-page-1#printSource" target="_blank">print</a><br />
<a target="_blank" href="http://newsn.net/20090525/472.html/comment-page-1#about" target="_blank">?</a><br />
1.__(“english”);<br />
间接输出字符串，有返回的地方：<br />
<a target="_blank" href="http://newsn.net/20090525/472.html/comment-page-1#viewSource" target="_blank">view source</a></p>
<p><a target="_blank" href="http://newsn.net/20090525/472.html/comment-page-1#printSource" target="_blank">print</a><br />
<a target="_blank" href="http://newsn.net/20090525/472.html/comment-page-1#about" target="_blank">?</a><br />
1.__(“english”,true);<br />
还有input要加个label来使他出现中文。<br />
<a target="_blank" href="http://newsn.net/20090525/472.html/comment-page-1#viewSource" target="_blank">view source</a></p>
<p><a target="_blank" href="http://newsn.net/20090525/472.html/comment-page-1#printSource" target="_blank">print</a><br />
<a target="_blank" href="http://newsn.net/20090525/472.html/comment-page-1#about" target="_blank">?</a><br />
1.__(“english”);echo $form-&gt;input(&#8216;name&#8217;,array(&#8216;label&#8217;=&gt;__(&#8216;name&#8217;,true)));<br />
<strong>2.4 最最重要的一步</strong><br />
就是要编辑这个文件了，locale/chi/LC_MESSAGES/default.po。中间的chi就是语言文件的标志位了。这个文件的格式也很简单，<br />
msgid “Chinese”<br />
msgstr “中国话”<br />
这个的简单重复就行了。<br />
<strong><span style="color: #ff0000;">三、使用poedit</span></strong><br />
使用poedit不是必须的，但是可以使工作变得简单的多。官方网站是：<br />
<a target="_blank" href="http://www.poedit.net/" target="_blank"><span style="color: #0000ff;">http://www.poedit.net/</span></a></p>
<p>他的主要功用就是使得编辑语言配置文件更加方便和快捷。下面是使用poedit的一些简单的截图和说明。<br />
<strong>3.1 头一次使用需要选择界面语言</strong><br />
<a target="_blank" href="http://newsn.net/upload/2009/05/poedit-01.png" target="_blank" rel="lightbox[2823]"><img src="http://www.82cs.com/wp-content/uploads/auto_save_image/2010/08/022135yMF.png" alt="" width="342" height="331" /></a><br />
<a target="_blank" href="http://newsn.net/upload/2009/05/poedit-02.png" target="_blank" rel="lightbox[2823]"><img src="http://www.82cs.com/wp-content/uploads/auto_save_image/2010/08/022141ACG.png" alt="" width="279" height="130" /></a><br />
<a target="_blank" href="http://newsn.net/upload/2009/05/poedit-03.png" target="_blank" rel="lightbox[2823]"><img src="http://www.82cs.com/wp-content/uploads/auto_save_image/2010/08/0221439lH.png" alt="" width="324" height="524" /></a><br />
<strong>3.2 新建一个配置文件，就是我们的目的文件po文件了</strong><br />
<a target="_blank" href="http://newsn.net/upload/2009/05/poedit-04.png" target="_blank" rel="lightbox[2823]"><img src="http://www.82cs.com/wp-content/uploads/auto_save_image/2010/08/022144v54.png" alt="" width="213" height="232" /></a><br />
<a target="_blank" href="http://newsn.net/upload/2009/05/poedit-05.png" target="_blank" rel="lightbox[2823]"><img src="http://www.82cs.com/wp-content/uploads/auto_save_image/2010/08/022146f2Z.png" alt="" width="304" height="341" /></a><br />
工程信息这里当然要选择好utf8格式了<br />
<a target="_blank" href="http://newsn.net/upload/2009/05/poedit-06.png" target="_blank" rel="lightbox[2823]"><img src="http://www.82cs.com/wp-content/uploads/auto_save_image/2010/08/022148tcj.png" alt="" width="304" height="341" /></a><br />
路径这里的基本路径填写cakephp的目录，当然这里居然没有浏览功能，真是崩溃。<br />
注意这里要通过下面的新建按钮新建一个名为“.”的路径，这样的话，以后就可以搜索基本路径下面的子目录了。<br />
<a target="_blank" href="http://newsn.net/upload/2009/05/poedit-07.png" target="_blank" rel="lightbox[2823]"><img src="http://www.82cs.com/wp-content/uploads/auto_save_image/2010/08/022150k7B.png" alt="" width="304" height="341" /></a><br />
关键字选项卡里面要填上cakephp的标志性本地化函数“__”。<br />
<a target="_blank" href="http://newsn.net/upload/2009/05/poedit-08.png" target="_blank" rel="lightbox[2823]"><img src="http://www.82cs.com/wp-content/uploads/auto_save_image/2010/08/022152xz7.png" alt="" width="263" height="144" /></a><br />
当然上面那些选项卡设置好之后，还可以通过菜单类目=》设置调出来，从新设置。<br />
<strong>3.3 点击那个小地球图标或者类目=》自源更新，开始自动扫描该翻译的文字了</strong><br />
<a target="_blank" href="http://newsn.net/upload/2009/05/poedit-09.png" target="_blank" rel="lightbox[2823]"><img src="http://www.82cs.com/wp-content/uploads/auto_save_image/2010/08/022154ZLY.png" alt="" width="232" height="96" /></a><br />
<a target="_blank" href="http://newsn.net/upload/2009/05/poedit-10.png" target="_blank" rel="lightbox[2823]"><img src="http://www.82cs.com/wp-content/uploads/auto_save_image/2010/08/022156A22.png" alt="" width="264" height="145" /></a><br />
<a target="_blank" href="http://newsn.net/upload/2009/05/poedit-11.png" target="_blank" rel="lightbox[2823]"><img src="http://www.82cs.com/wp-content/uploads/auto_save_image/2010/08/022157Ekf.png" alt="" width="255" height="123" /></a><br />
<strong>3.4 但是这个时候，你可能会发现扫描出来的字段远远少于你需要的东东，原来这个软件不认识ctp文件。这个步骤的设置是让他能识别ctp文件设置。文件=》首选=》解析器。<br />
本步骤参考了一个意大利程序员的博客文章，在此向他表示感谢先。</strong><br />
<a target="_blank" href="http://www.luizz.it/119/cakephp/poedit-e-i-file-ctp" target="_blank"><span style="color: #810081;">http://www.luizz.it/119/cakephp/poedit-e-i-file-ctp</span></a><br />
<a target="_blank" href="http://newsn.net/upload/2009/05/poedit-12.png" target="_blank" rel="lightbox[2823]"><img src="http://www.82cs.com/wp-content/uploads/auto_save_image/2010/08/022159u1B.png" alt="" width="212" height="257" /></a><br />
<a target="_blank" href="http://newsn.net/upload/2009/05/poedit-13.png" target="_blank" rel="lightbox[2823]"><img src="http://www.82cs.com/wp-content/uploads/auto_save_image/2010/08/022200B3P.png" alt="" width="324" height="192" /></a><br />
选中php，选择编辑，然后在第2行内输入ctp文件后缀，如下图，但是注意下图的设置是错误的!虽然上面的提示，是用逗号分隔，但是实践证明，用分号才是正确的选择。这个很令人崩溃，大概是poedit的一个小bug吧。会出现错误提示。<br />
<a target="_blank" href="http://newsn.net/upload/2009/05/poedit-14.png" target="_blank" rel="lightbox[2823]"><img src="http://www.82cs.com/wp-content/uploads/auto_save_image/2010/08/022206VV7.png" alt="" width="298" height="560" /></a><br />
<a target="_blank" href="http://newsn.net/upload/2009/05/poedit-145.png" target="_blank" rel="lightbox[2823]"><img src="http://www.82cs.com/wp-content/uploads/auto_save_image/2010/08/0222080NM.png" alt="" width="472" height="244" /></a><br />
但是如果用分号分隔的话，仍然会看到如下错误提示。<br />
<a target="_blank" href="http://newsn.net/upload/2009/05/poedit-15.png" target="_blank" rel="lightbox[2823]"><img src="http://www.82cs.com/wp-content/uploads/auto_save_image/2010/08/022210Qwv.png" alt="" width="609" height="108" /></a><br />
需要在下面的解析器命令下面增加个选项 –language=php，注意这里是两个中划线啊。所以这个步骤的要点就是下图所示了。<br />
<a target="_blank" href="http://newsn.net/upload/2009/05/poedit-16.png" target="_blank" rel="lightbox[2823]"><img src="http://www.82cs.com/wp-content/uploads/auto_save_image/2010/08/02221722X.png" alt="" width="298" height="560" /></a><br />
<strong>3.5 这里通过那个地球图标就可以找出所有需要翻译的字段了，当然这个操作的前提是你已经用__函数把所有的字段都标示好了。如果你按这个图标之前进行了部分翻译，这个操作如果发现了新字句，这个软件会根据以前的翻译自己翻译字句的，并用棕色突出显示它自动翻译的词语。当然，一般都是不准确的。所以还是需要进行修改保存操作的说。<br />
</strong><br />
<a target="_blank" href="http://newsn.net/upload/2009/05/poedit-17.png" target="_blank" rel="lightbox[2823]"><img src="http://www.82cs.com/wp-content/uploads/auto_save_image/2010/08/022219UPV.png" alt="" width="258" height="170" /></a><br />
<strong>3.6 如果这个时候你查看生成的po文件的时候，比自己手写的文件确实多些设置。</strong><br />
<a target="_blank" href="http://newsn.net/upload/2009/05/poedit-18.png" target="_blank" rel="lightbox[2823]"><img src="http://www.82cs.com/wp-content/uploads/auto_save_image/2010/08/022224OBC.png" alt="" width="202" height="438" /></a></p>
<p><strong>本文来自ChinaUnix博客，如果查看原文请点：</strong><a target="_blank" href="http://blog.chinaunix.net/u1/59571/showart_2055127.html" target="_blank">http://blog.chinaunix.net/u1/59571/showart_2055127.html</a></td>
</tr>
</tbody>
</table>
<h2>Today on history:</h2><ol><li>2008:&nbsp;&nbsp;<a href='http://www.82cs.com/200808/16/%e6%90%9e%e7%ac%91%e9%97%bd%e5%8d%97%e8%af%ad%e5%af%b9%e7%99%bd/' title='Permanent Link to 搞笑闽南语对白'>搞笑闽南语对白(0)</a></li><li>2007:&nbsp;&nbsp;<a href='http://www.82cs.com/200708/16/archive_495/' title='Permanent Link to 常用的IPTABLES规则'>常用的IPTABLES规则(0)</a></li></ol>]]></content:encoded>
			<wfw:commentRss>http://www.82cs.com/201008/16/using-i18n-in-cakephp-real-multi-language-localization-process-and-edit-the-language-file-to-use-poedit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CakePHP FAQ整理</title>
		<link>http://www.82cs.com/201008/04/cakephp_faq/</link>
		<comments>http://www.82cs.com/201008/04/cakephp_faq/#comments</comments>
		<pubDate>Wed, 04 Aug 2010 02:41:17 +0000</pubDate>
		<dc:creator>Jansfer</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[cakephp]]></category>
		<category><![CDATA[faq]]></category>
		<category><![CDATA[帮助]]></category>
		<category><![CDATA[问答]]></category>

		<guid isPermaLink="false">http://www.82cs.com/201008/04/cakephp_faq/</guid>
		<description><![CDATA[Q：CakePHP官方文档在哪里 A：http://book.cakephp.org/cn/view/876/The-Manual Q: 如何替换cake默认的layout（全局模板页）？ A: 把在/cake/libs/view/templates/layouts/default.ctp 复制到 /app/views/layouts/default.ctp ，然后按需修改 Q: 使用UTF8 库时出现乱码（页面和?菘舛际荱TF8，只是显示取出的数据时乱码）？ A: 在1.2x中：在/app/config/databases.php的配置中添加&#8217;encoding&#8217; =&#62; &#8216;UTF8&#8242;，cake则会在执行SQL前先执行一次SET NAMES $encoding Q: model/behavior，view/helper，controller/component 之间是什么关系？ A: model view controller是常说的MVC模式，model一般负责数据存储，view负责页面显示（一般是页面模板），controller负责控制调用哪个model以及哪个view来显示结果，其他则是他们各自的辅助部分。 Q: 如何建立一个公共的controller（如何使所有controller都有相同的属性或方法）？ A: 把/cake/app_controller.php 复制到 /app/app_controller.php ，按需修改即可。（为什么是放到/app目录下而不是/app/controllers中呢？） Q: 如何建立一个公共的model（如何使所有model都有相同的属性或方法）？ A: 把/cake/app_model.php 复制到 /app/app_model.php，按需修改即可。（为什么是放到/app目录下而不是/app/moclels中呢？） Q: 如何建立一个公共的helper（如何使所有helper都有相同的属性或方法）？ A: 同上，推理可得。 Q: 如何使controller不自动加载model（建立一个不需要model的controller）？ A: 在controller中添加一个空值属性：var $uses = ”; Q: 如何建立不需要读取数据库的model? A: 添加属性声明：var $useTable = [...]]]></description>
			<content:encoded><![CDATA[<p>Q：CakePHP官方文档在哪里</p>
<p>A：<a target="_blank" href="http://book.cakephp.org/cn/view/876/The-Manual">http://book.cakephp.org/cn/view/876/The-Manual</a></p>
<p>Q: 如何替换cake默认的layout（全局模板页）？   <br />A: 把在/cake/libs/view/templates/layouts/default.ctp 复制到 /app/views/layouts/default.ctp ，然后按需修改</p>
<p>Q: 使用UTF8 库时出现乱码（页面和?菘舛际荱TF8，只是显示取出的数据时乱码）？   <br />A: 在1.2x中：在/app/config/databases.php的配置中添加&#8217;encoding&#8217; =&gt; &#8216;UTF8&#8242;，cake则会在执行SQL前先执行一次SET NAMES $encoding</p>
<p>Q: model/behavior，view/helper，controller/component 之间是什么关系？   <br />A: model view controller是常说的MVC模式，model一般负责数据存储，view负责页面显示（一般是页面模板），controller负责控制调用哪个model以及哪个view来显示结果，其他则是他们各自的辅助部分。</p>
<p>Q: 如何建立一个公共的controller（如何使所有controller都有相同的属性或方法）？   <br />A: 把/cake/app_controller.php 复制到 /app/app_controller.php ，按需修改即可。（为什么是放到/app目录下而不是/app/controllers中呢？）</p>
<p>Q: 如何建立一个公共的model（如何使所有model都有相同的属性或方法）？   <br />A: 把/cake/app_model.php 复制到 /app/app_model.php，按需修改即可。（为什么是放到/app目录下而不是/app/moclels中呢？）</p>
<p>Q: 如何建立一个公共的helper（如何使所有helper都有相同的属性或方法）？   <br />A: 同上，推理可得。</p>
<p>Q: 如何使controller不自动加载model（建立一个不需要model的controller）？   <br />A: 在controller中添加一个空值属性：var $uses = ”;</p>
<p>Q: 如何建立不需要读取数据库的model?   <br />A: 添加属性声明：var $useTable = false;</p>
<p>Q: 如何在controller中调用多个model?   <br />A: 添加属性声明：var $uses = array(&#8216;Model1&#8242;, &#8216;Model2&#8242;);</p>
<p>Q: 如何在controller中临时(手工)调用其他model?   <br />A: <a target="_blank" href="http://www.thinkingphp.org/2007/01/22/how-to-properly-create-a-model-instance-manually/">How to properly create a Model instance manually     <br /></a>或 <a target="_blank" href="http://bakery.cakephp.org/articles/view/creating-reusable-elements-with-requestaction">Creating Reusable Elements with requestAction</a></p>
<p>Q: 在controller中如何调用component？   <br />A: 在controller中声明：var $components = array(&#8216;Mycomponent&#8217;);，然后就可以在方法中通过 $ths-&gt;Mycomponent 来调用</p>
<p>Q: 如何在component中访问controller   <br />A: 在1.1.x中可以这样：    <br />class RequestComponent extends Object    <br />{    <br />var $controller;    <br />function startup(&amp;$controller)    <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {    <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; $this-&gt;controller = &amp;$controller;    <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }</p>
<p>}</p>
<p>Q: 如何使controller的方法不能直接通过URL访问？   <br />A: 在方法名前加个_，如：function _test()</p>
<p>Q: 在controller的一个方法中，如何调用另一个方法的输出结果？   <br />A: $this-&gt;render(&#8216;另一个方法名&#8217;);，相关的还有$this-&gt;requestAction，详细见手册。</p>
<p>Q: 如何让view可以使用其他helper？   <br />A: 在controller中声明：var $helpers = array(&#8216;Form&#8217;,'Text&#8217;); （注：html是默认就有的，在1.2x中不需要再包含进去）</p>
<p>Q: 怎样在cake中使用smarty?   <br />A:</p>
<p>Q: 如何获取由$form-&gt;input(&#8216;var&#8217;)提交的数据？   <br />A: 在controller中通过$this-&gt;params['url']['data'][$this-&gt;controller-&gt;modelClass]['var'] 取得</p>
<p>Q: 如何取得URL中如/store/buy/12 的参数值？   <br />A: 在controller中通过$this-&gt;params['pass'][0] 取得</p>
<p>Q: 如何在cake中使用AJAX?</p>
<p>Q: 如何映射一个controller(不建立controller但可以使不同的URL指向同一个controller)?</p>
<p>Q: 如何在一个model中调用其他model?</p>
<p>Q: 如何使controller的action不调用它的view（没有view的action）?</p>
<p>Q: 如何动态关闭cakeSqlLog?   <br />A: /app/config/core.php中，将Configure::write(&#8216;debug&#8217;, 2);修改为Configure::write(&#8216;debug&#8217;, 0);</p>
<p>Q: 如何在一个helper中调用另一个helper?   <br />A: 设置var $helpers = array(&#8216;Myhelper&#8217;); ，然后就可以在类中用$this-&gt;Myhelper来调用（注意属性大小写）</p>
<h2>Today on history:</h2><ol><li>2007:&nbsp;&nbsp;<a href='http://www.82cs.com/200708/04/autocad2006激活码sn注册机/' title='Permanent Link to Autocad 2006 激活码/sn/注册机'>Autocad 2006 激活码/sn/注册机(2)</a></li></ol>]]></content:encoded>
			<wfw:commentRss>http://www.82cs.com/201008/04/cakephp_faq/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CakePHP的一些小技巧</title>
		<link>http://www.82cs.com/201007/22/cakephp%e7%9a%84%e4%b8%80%e4%ba%9b%e5%b0%8f%e6%8a%80%e5%b7%a7/</link>
		<comments>http://www.82cs.com/201007/22/cakephp%e7%9a%84%e4%b8%80%e4%ba%9b%e5%b0%8f%e6%8a%80%e5%b7%a7/#comments</comments>
		<pubDate>Thu, 22 Jul 2010 06:49:41 +0000</pubDate>
		<dc:creator>Jansfer</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[cakephp]]></category>

		<guid isPermaLink="false">http://www.82cs.com/201007/22/cakephp%e7%9a%84%e4%b8%80%e4%ba%9b%e5%b0%8f%e6%8a%80%e5%b7%a7/</guid>
		<description><![CDATA[1. 禁止布局 如果需要在全局禁止布局则在app_controller.php中设置$this-&#62;autoLayout = false，其子类可以继承/重写该设置；如果需要有条件，则可以将$this-&#62;autoLayout = false放在app_controller.php的before_filter()过滤器中。 如果只是个别的controller/action的话，那么最好是直接在具体的action定义中设定$this-&#62;autoLayout = false，而不是在控制器层级设定。 2. HTML助手 在模板里使用图片的时候，最好是使用助手的方式，如：echo $html-&#62;image(’pic.gif’)，而不是直接手动编写&#60;img&#62;标签，因为如果硬编码的话，一旦网站目录结构出现变化，问题就严重了。同样的情况还出现在链接上，应该使用助手的方式，如：echo $html-&#62;url(array(’action’ =&#62; ‘foobar’)。 图片链接生成的两种方式: &#160; //由$html-&#62;image()方法生成，简单而实用。但不够灵活，不能为&#60;a&#62;链接添加额外的属性 &#60;?=$html-&#62;image('/img/icons/review.png',array('alt'=&#62;__('Review',true),'url'=&#62;'/admin/members/review/'.$member['Account']['id']))?&#62; //由$html-&#62;link()生成，可以添加额外的属性，如提示信息。注意其中最后一个参数必须设置为false，否则会将$html-&#62;image转义 &#60;?=$html-&#62;link($html-&#62;image('/img/icons/destroy.png',array('alt'=&#62;__('Trash',true))), '/admin/members/destroy/'.$member['Account']['id'], array(), 'Are you sure you want to delete this record?', false ) ?&#62; 3. 分页助手 分页助手一般使用的都是文字链接，但实际上也可以使用图片链接，方法如下： &#60;?php echo $paginator-&#62;prev($html-&#62;image('prev.gif', array('border' =&#62; 0)), array('escape' =&#62; false));?&#62; 类似的，表单提交按钮如果想使用图片的话，方法如下： &#60;?php $form-&#62;submit(‘pic.gif’)?&#62; 注意所有图片文件都被认为是存放在webroot目录下的img文件夹内的。 分页默认是由div包裹，这个是可以自定义的： &#60;?=$paginator-&#62;prev('« [...]]]></description>
			<content:encoded><![CDATA[<p>1. <strong>禁止布局</strong>    <br />如果需要在全局禁止布局则在app_controller.php中设置$this-&gt;autoLayout = false，其子类可以继承/重写该设置；如果需要有条件，则可以将$this-&gt;autoLayout = false放在app_controller.php的before_filter()过滤器中。    <br />如果只是个别的controller/action的话，那么最好是直接在具体的action定义中设定$this-&gt;autoLayout = false，而不是在控制器层级设定。 </p>
<p>2. <strong>HTML助手</strong>    <br />在模板里使用图片的时候，最好是使用助手的方式，如：echo $html-&gt;image(’pic.gif’)，而不是直接手动编写&lt;img&gt;标签，因为如果硬编码的话，一旦网站目录结构出现变化，问题就严重了。同样的情况还出现在链接上，应该使用助手的方式，如：echo $html-&gt;url(array(’action’ =&gt; ‘foobar’)。 </p>
<p>图片链接生成的两种方式:</p>
<p>&#160;</p>
<div>
<pre class="code">//由$html-&gt;image()方法生成，简单而实用。但不够灵活，不能为<span style="color: #0000ff">&lt;</span><span style="color: #800000">a</span><span style="color: #0000ff">&gt;</span>链接添加额外的属性
 <span style="color: #0000ff">&lt;?</span>=$html-&gt;image('<span style="color: #8b0000">/img/icons/review.png</span>',<a target="_blank" style="color: #ffa500" href="http://www.php.net/array">array</a>('<span style="color: #8b0000">alt</span>'=&gt;__('<span style="color: #8b0000">Review</span>',<a target="_blank" style="color: #0000ff" href="http://www.php.net/true">true</a>),'<span style="color: #8b0000">url</span>'=&gt;'<span style="color: #8b0000">/admin/members/review/</span>'.$member['<span style="color: #8b0000">Account</span>']['<span style="color: #8b0000">id</span>']))<span style="color: #0000ff">?&gt;</span>
//由$html-&gt;link()生成，可以添加额外的属性，如提示信息。注意其中最后一个参数必须设置为false，否则会将$html-&gt;image转义
<span style="color: #0000ff">&lt;?</span>=$html-&gt;<a target="_blank" style="color: #ffa500" href="http://www.php.net/link">link</a>($html-&gt;image('<span style="color: #8b0000">/img/icons/destroy.png</span>',<a target="_blank" style="color: #ffa500" href="http://www.php.net/array">array</a>('<span style="color: #8b0000">alt</span>'=&gt;__('<span style="color: #8b0000">Trash</span>',<a target="_blank" style="color: #0000ff" href="http://www.php.net/true">true</a>))),
                                  '<span style="color: #8b0000">/admin/members/destroy/</span>'.$member['<span style="color: #8b0000">Account</span>']['<span style="color: #8b0000">id</span>'],
                                  <a target="_blank" style="color: #ffa500" href="http://www.php.net/array">array</a>(),
                                  '<span style="color: #8b0000">Are you sure you want to delete this record?</span>',
                                  <a target="_blank" style="color: #0000ff" href="http://www.php.net/false">false</a>
                    )
<span style="color: #0000ff">?&gt;</span></pre>
</div>
<p>3. <strong>分页助手<br />
    <br /></strong>分页助手一般使用的都是文字链接，但实际上也可以使用图片链接，方法如下：</p>
<div>
<pre class="code"><span style="color: #0000ff">&lt;?</span>php <a target="_blank" style="color: #0000ff" href="http://www.php.net/echo">echo</a> $paginator-&gt;<a target="_blank" style="color: #ffa500" href="http://www.php.net/prev">prev</a>($html-&gt;image('<span style="color: #8b0000">prev.gif</span>', <a target="_blank" style="color: #ffa500" href="http://www.php.net/array">array</a>('<span style="color: #8b0000">border</span>' =&gt; 0)), <a target="_blank" style="color: #ffa500" href="http://www.php.net/array">array</a>('<span style="color: #8b0000">escape</span>' =&gt; <a target="_blank" style="color: #0000ff" href="http://www.php.net/false">false</a>));<span style="color: #0000ff">?&gt;</span></pre>
</div>
<p></p>
<p>类似的，表单提交按钮如果想使用图片的话，方法如下：</p>
<div>
<pre class="code"><span style="color: #0000ff">&lt;?</span>php $form-&gt;submit(‘pic.gif’)<span style="color: #0000ff">?&gt;</span></pre>
</div>
<p></p>
<p>注意所有图片文件都被认为是存放在webroot目录下的img文件夹内的。</p>
<p>分页默认是由div包裹，这个是可以自定义的：</p>
<div>
<pre class="code"> <span style="color: #0000ff">&lt;?</span>=$paginator-&gt;<a target="_blank" style="color: #ffa500" href="http://www.php.net/prev">prev</a>('<span style="color: #8b0000">« </span>'.__('<span style="color: #8b0000">Previous</span>', <a target="_blank" style="color: #0000ff" href="http://www.php.net/true">true</a>), <a target="_blank" style="color: #ffa500" href="http://www.php.net/array">array</a>(), null, <a target="_blank" style="color: #ffa500" href="http://www.php.net/array">array</a>('<span style="color: #8b0000">class</span>'=&gt;'<span style="color: #8b0000">disabled prev_page</span>','<span style="color: #8b0000">tag</span>'=&gt;'<span style="color: #8b0000">span</span>'));<span style="color: #0000ff">?&gt;</span></pre>
</div>
<p></p>
<p>有时候分页时需要通过URL传递一些查询参数，此时应该在模板文件里按如下设置：</p>
<div>
<pre class="code"><span style="color: #0000ff">&lt;?</span>php $paginator-&gt;options(<a target="_blank" style="color: #ffa500" href="http://www.php.net/array">array</a>('<span style="color: #8b0000">url</span>' =&gt; $this-&gt;passedArgs));<span style="color: #0000ff">?&gt;</span></pre>
</div>
<p></p>
<p>4. <strong>Form助手</strong></p>
<p>在CakePHP里，Form助手可以说是所有助手里最重要的，也是最复杂的，其中，尤以input方法为甚，比如说文章属于一个目录，那么在录入文章的表单里我们可以这样生成一个目录的下拉菜单：</p>
<div>
<pre class="code"><span style="color: #0000ff">&lt;?</span>php
$form-&gt;input('<span style="color: #8b0000">category_id</span>');
<span style="color: #008000">//当然，仅仅这样还不够，还需要在控制器里提供数据才OK</span>
$this-&gt;set('<span style="color: #8b0000">categories</span>', $this-&gt;Article-&gt;Category-&gt;find('<span style="color: #8b0000">list</span>'));
<span style="color: #0000ff">?&gt;</span></pre>
</div>
<p></p>
<p>相应表有一个name字段用于显示，当然你也可以在模型里设定var $displayField属性。总体来说非常简单，甚至有点奇幻的感觉，这是因为CakePHP在这里做了点小动作，参考form.php文件：</p>
<div>
<pre class="code"><span style="color: #0000ff">&lt;?</span>php
<a target="_blank" style="color: #0000ff" href="http://www.php.net/if">if</a> (!isset($options['<span style="color: #8b0000">options</span>']) &amp;&amp; <a target="_blank" style="color: #ffa500" href="http://www.php.net/in_array">in_array</a>($options['<span style="color: #8b0000">type</span>'], $types)) {
    $view =&amp; ClassRegistry::getObject('<span style="color: #8b0000">view</span>');
    $varName = Inflector::variable(
        Inflector::pluralize(<a target="_blank" style="color: #ffa500" href="http://www.php.net/preg_replace">preg_replace</a>('<span style="color: #8b0000">/_id$/</span>', '<span style="color: #8b0000"></span>', $this-&gt;field()))
    );
    $varOptions = $view-&gt;getVar($varName);
    <a target="_blank" style="color: #0000ff" href="http://www.php.net/if">if</a> (<a target="_blank" style="color: #ffa500" href="http://www.php.net/is_array">is_array</a>($varOptions)) {
        <a target="_blank" style="color: #0000ff" href="http://www.php.net/if">if</a> ($options['<span style="color: #8b0000">type</span>'] !== '<span style="color: #8b0000">radio</span>') {
            $options['<span style="color: #8b0000">type</span>'] = '<span style="color: #8b0000">select</span>';
        }
        $options['<span style="color: #8b0000">options</span>'] = $varOptions;
    }
}
<span style="color: #0000ff">?&gt;</span></pre>
</div>
<p></p>
<p>CakePHP会把表单元素名字中的_id部分去掉，并转换成复数形式，然后在当前视图变量里查找是否已经有了同名的变量，如果有，且未设置成radio单选标签，就把它当做select下拉菜单。</p>
<p>表单助手缺省创建的input会有div包裹，还有label等等修饰，很多时候这和美工设计的页面结构不同，这时：<br />
  <br />$form-&gt;input(’password’, array(’div’ =&gt; false, ‘label’ =&gt; false, ‘error’ =&gt; false))</p>
<p>输出记得转义，CakePHP提供了h()方法，很简单，但是总容易忘。</p>
<p>这里还有一个技巧，就是在渲染select的时候，如果原来的数据库表里有一个名为name或者title的字段，那么会自动被当做下拉菜单的显示部分。</p>
<p>5. <strong>saveAll方法<br />
    <br /></strong>saveAll方法可以同时保存一对一，一对多的关系。比如说一个question有多个answer，那么在question的表单里，我们就可以这样设定：</p>
<div>
<pre class="code"><span style="color: #0000ff">&lt;?</span>php
<a target="_blank" style="color: #0000ff" href="http://www.php.net/echo">echo</a> $form-&gt;input('<span style="color: #8b0000">Question.title</span>');
<a target="_blank" style="color: #0000ff" href="http://www.php.net/echo">echo</a> $form-&gt;input('<span style="color: #8b0000">Answer.0.content</span>');
<a target="_blank" style="color: #0000ff" href="http://www.php.net/echo">echo</a> $form-&gt;input('<span style="color: #8b0000">Answer.1.content</span>');
<a target="_blank" style="color: #0000ff" href="http://www.php.net/echo">echo</a> $form-&gt;input('<span style="color: #8b0000">Answer.2.content</span>');
<a target="_blank" style="color: #0000ff" href="http://www.php.net/echo">echo</a> $form-&gt;input('<span style="color: #8b0000">Answer.3.content</span>');
<span style="color: #0000ff">?&gt;</span></pre>
</div>
<p></p>
<p>经过这样简单的设定后，在question控制器里就可以使用saveAll方法一次性保存所有的数据了。</p>
<p>6. <strong>Configure最多支持三级设置</strong></p>
<p>如果超过三级，比如说Configure::write(’A.B.C.D’, ‘…’);这样是无效的，做多A.B.C三级。</p>
<p>
  <br />7. <strong>通过HTTP_X_FORWARDED_FOR得到客户端IP<br />
    <br /></strong>如果想通过HTTP_X_FORWARDED_FOR得到客户端IP，必须传递一个false参数：</p>
</p>
</p>
</p>
</p>
<div>
<pre class="code"><span style="color: #0000ff">&lt;?</span>php $this-&gt;RequestHandler-&gt;getClientIP(<a target="_blank" style="color: #0000ff" href="http://www.php.net/false">false</a>);<span style="color: #0000ff">?&gt;</span></pre>
</div>
<p></p>
<p>就是说要传递一个false参数，不过这样做仅适合安全性要求不高的应用。</p>
<p>8. <strong>钩子方法afterFilter并不一定会执行</strong></p>
<p>这是CakePHP的一个硬伤，因为redirect会直接跳转，所以afterFilter有可能会被忽略，这点要注意。</p>
<p>9. <strong>Auth组件缺省设置的弊端</strong></p>
<p>缺省实现里，提交表单时，如果有password字段，会自动哈希处理，但是有的时候反倒麻烦，比如说添加用户时，如果验证未通过，再显示出错表单时，密码字段已经被哈希了，已经不是初始值了，再提交就不对了，所以为了屏蔽问题，就不应该再使用password字段名，而应该改名，以注册表单为例：<br />
  <br />原始密码：</p>
<div>
<pre class="code"><span style="color: #0000ff">&lt;?</span>php <a target="_blank" style="color: #0000ff" href="http://www.php.net/echo">echo</a> input(’encrypt_password’); <span style="color: #0000ff">?&gt;</span></pre>
</div>
<p></p>
<p>确认密码：</p>
<div>
<pre class="code"><span style="color: #0000ff">&lt;?</span>php <a target="_blank" style="color: #0000ff" href="http://www.php.net/echo">echo</a> input(’confirm_password’); <span style="color: #0000ff">?&gt;</span></pre>
</div>
<p></p>
<p>这样的话，字段值在提交前后始终保持是初始值，就不会再有问题了。</p>
<h2>Today on history:</h2><ol><li>2008:&nbsp;&nbsp;<a href='http://www.82cs.com/200807/22/archive_870/' title='Permanent Link to 夫妻之间的潜规则'>夫妻之间的潜规则(0)</a></li><li>2008:&nbsp;&nbsp;<a href='http://www.82cs.com/200807/22/archive_869/' title='Permanent Link to 我什么都不说，你自己看吧'>我什么都不说，你自己看吧(0)</a></li><li>2008:&nbsp;&nbsp;<a href='http://www.82cs.com/200807/22/early-morning-of-xiamen/' title='Permanent Link to 清晨的厦门'>清晨的厦门(0)</a></li></ol>]]></content:encoded>
			<wfw:commentRss>http://www.82cs.com/201007/22/cakephp%e7%9a%84%e4%b8%80%e4%ba%9b%e5%b0%8f%e6%8a%80%e5%b7%a7/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CakePHP结合AJAX处理时提示缺少视图Missing View</title>
		<link>http://www.82cs.com/201007/19/cakephp-and-ajax-missing-view/</link>
		<comments>http://www.82cs.com/201007/19/cakephp-and-ajax-missing-view/#comments</comments>
		<pubDate>Mon, 19 Jul 2010 10:01:45 +0000</pubDate>
		<dc:creator>Jansfer</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[cakephp]]></category>
		<category><![CDATA[Missing View]]></category>

		<guid isPermaLink="false">http://www.82cs.com/?p=2806</guid>
		<description><![CDATA[如果在CakePHP项目中使用AJAX使用AJAX，输出就不需要视图。但程序会提示：Missing View。这个时候只要在方法里加入以下代码： function someMethod() { $this->autoRender = false; } 同样如果你开启了debug，在处理AJAX时需要关闭。 function someMethod() { $this->autoRender = false; if ( $this->RequestHandler->isAjax() ) { Configure::write ( 'debug', 0 ); } } Today on history:2008:&#160;&#160;When you believe (1)2007:&#160;&#160;小宝宝的照片(0)]]></description>
			<content:encoded><![CDATA[<p>如果在CakePHP项目中使用AJAX使用AJAX，输出就不需要视图。但程序会提示：Missing View。这个时候只要在方法里加入以下代码：</p>
<pre>
function someMethod() {
	 $this->autoRender = false;
}
</pre>
<p>同样如果你开启了debug，在处理AJAX时需要关闭。</p>
<pre>

function someMethod() {
	 $this->autoRender = false;
	 if ( $this->RequestHandler->isAjax() ) {
		  Configure::write ( 'debug', 0 );
	 }
}
</pre>
<h2>Today on history:</h2><ol><li>2008:&nbsp;&nbsp;<a href='http://www.82cs.com/200807/19/When-you-believe/' title='Permanent Link to When you believe '>When you believe (1)</a></li><li>2007:&nbsp;&nbsp;<a href='http://www.82cs.com/200707/19/archive_482/' title='Permanent Link to 小宝宝的照片'>小宝宝的照片(0)</a></li></ol>]]></content:encoded>
			<wfw:commentRss>http://www.82cs.com/201007/19/cakephp-and-ajax-missing-view/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CakePHP+MySQL实现主从数据库读写分离操作</title>
		<link>http://www.82cs.com/201007/17/cakephp-mysql-to-achieve-separation-of-master-and-slave-database-read-and-write-operations/</link>
		<comments>http://www.82cs.com/201007/17/cakephp-mysql-to-achieve-separation-of-master-and-slave-database-read-and-write-operations/#comments</comments>
		<pubDate>Sat, 17 Jul 2010 09:45:52 +0000</pubDate>
		<dc:creator>Jansfer</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[cakephp]]></category>
		<category><![CDATA[Master]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[Slave]]></category>
		<category><![CDATA[读写分离]]></category>

		<guid isPermaLink="false">http://www.82cs.com/?p=2802</guid>
		<description><![CDATA[如果项目中使用多数据库Master+Slave实现数据负载分享，那么CakePHP如何对应实现读写分离呢？记得上一篇我们读到beforeFind和beforeSave方法吗？没错，整个实现过程非常简单。 首先修改database.php设置： 然后修改app_module.php 如果是多台Slave数据库呢？可以配置$slave_db1, $slave_db2&#8230;.$slave_db10，然后在用随机数来简单实现从多台Slave获取数据。当然实际上会有更高效的方法实现均衡从多台Slave获取数据，这个下次讲。 Today on history:2007:&#160;&#160;对目录下所有文件内容替换(0)2006:&#160;&#160;什么是强热带风暴(0)2006:&#160;&#160;龙门那边路塌了(0)]]></description>
			<content:encoded><![CDATA[<p>如果项目中使用多数据库Master+Slave实现数据负载分享，那么CakePHP如何对应实现读写分离呢？记得上一篇我们读到beforeFind和beforeSave方法吗？没错，整个实现过程非常简单。</p>
<p>首先修改database.php设置：</p>
<pre>

<?php
class DATABASE_CONFIG {
public $default = array(
'driver' => 'mysql',
'persistent' => false,
'host' => '192.160.1.110',
'port' => '',
'login' => 'root',
'password' => '1234',
'database' => 'cakephp',
'schema' => '',
'prefix' => '',
'encoding' => 'UTF8'
);
public $master = array(
'driver' => 'mysql',
'persistent' => false,
'host' => '192.168.1.100',
'port' => '',
'login' => 'root',
'password' => '',
'database' => 'cakephp',
'schema' => '',
'prefix' => '',
'encoding' => 'UTF8'
);
}
?>
</pre>
<p>然后修改app_module.php</p>
<pre>

<?php

class AppModel extends Model {

function beforeSave() {

$this->useDbConfig = 'master';

}

function afterSave() {

$this->useDbConfig = 'default';

}

function beforeDelete() {

$this->useDbConfig = 'master';

}

function afterDelete() {

$this->useDbConfig = 'default';

}

}

?>
</pre>
<p>如果是多台Slave数据库呢？可以配置$slave_db1, $slave_db2&#8230;.$slave_db10，然后在用随机数来<strong>简单实现</strong>从多台Slave获取数据。当然实际上会有更高效的方法实现均衡从多台Slave获取数据，这个下次讲。</p>
<h2>Today on history:</h2><ol><li>2007:&nbsp;&nbsp;<a href='http://www.82cs.com/200707/17/archive_481/' title='Permanent Link to 对目录下所有文件内容替换'>对目录下所有文件内容替换(0)</a></li><li>2006:&nbsp;&nbsp;<a href='http://www.82cs.com/200607/17/archive_41/' title='Permanent Link to 什么是强热带风暴'>什么是强热带风暴(0)</a></li><li>2006:&nbsp;&nbsp;<a href='http://www.82cs.com/200607/17/archive_40/' title='Permanent Link to 龙门那边路塌了'>龙门那边路塌了(0)</a></li></ol>]]></content:encoded>
			<wfw:commentRss>http://www.82cs.com/201007/17/cakephp-mysql-to-achieve-separation-of-master-and-slave-database-read-and-write-operations/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CakePHP中配置AppModel避免中文乱码</title>
		<link>http://www.82cs.com/201007/05/configure_cakephp_appmodel_avoid_chinese_garbled/</link>
		<comments>http://www.82cs.com/201007/05/configure_cakephp_appmodel_avoid_chinese_garbled/#comments</comments>
		<pubDate>Mon, 05 Jul 2010 01:16:16 +0000</pubDate>
		<dc:creator>Jansfer</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[AppMode]]></category>
		<category><![CDATA[cakephp]]></category>
		<category><![CDATA[中文]]></category>
		<category><![CDATA[乱码]]></category>

		<guid isPermaLink="false">http://www.82cs.com/201007/05/configure_cakephp_appmodel_avoid_chinese_garbled/</guid>
		<description><![CDATA[CakePHP默认是使用utf-8编码的，但有时候因为环境等问题，导致中文数据乱码。 方法一：解决方法是修改cake/libs/module/app_module.php，修改后代码如下： &#160; class AppModel extends Model { public $actsAs = array(&#34;Containable&#34;); public function beforeFind() { $this-&#62;query(&#34;SET NAMES utf8&#34;); } public function beforeSave() { $this-&#62;query(&#34;SET NAMES utf8&#34;); return true; } } 方法二：修改app/config/database.php 增加：encoding=&#62;’utf8’ 搞定收工。 之所以把方法一放在前面，是为了让大家知道有beforexxx的方法。建议使用方法二]]></description>
			<content:encoded><![CDATA[<p>CakePHP默认是使用utf-8编码的，但有时候因为环境等问题，导致中文数据乱码。</p>
<p><strong>方法一：</strong>解决方法是修改cake/libs/module/app_module.php，修改后代码如下：</p>
<p>&#160;</p>
<div>
<pre class="code">class AppModel extends Model {

	public $actsAs = array(&quot;Containable&quot;);

	public function beforeFind() {
		$this-&gt;query(&quot;SET NAMES utf8&quot;);
	}

	public function beforeSave() {
		$this-&gt;query(&quot;SET NAMES utf8&quot;);
		return true;
	}
}</pre>
</div>
<p><strong>方法二</strong>：修改app/config/database.php</p>
<p>增加：encoding=&gt;’utf8’</p>
<p>
  <br />搞定收工。 之所以把方法一放在前面，是为了让大家知道有beforexxx的方法。建议使用方法二</p>
]]></content:encoded>
			<wfw:commentRss>http://www.82cs.com/201007/05/configure_cakephp_appmodel_avoid_chinese_garbled/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

