jackyrong

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

cakephp 学习小结 6


1 把运行时,cake下部的debug信息改掉,可以这样
   把app\config\core.php的第43行
   * Development Mode:
 *  1: Errors and warnings shown, model caches refreshed, flash messages halted.
 *  2: As in 1, but also with full debug messages and SQL output.
 *  3: As in 2, but also with full controller dump.
 *
 * In production mode, flash messages redirect after a time interval.
 * In development mode, you need to click the flash message to continue.
 */
 Configure::write('debug', 2);
  改为Configure::write('debug', 0);

2 把比如http://localhost:8082/myphp5/quickwall/home改
为http://localhost:8082/myphp5/quickwall即可访问,
更改app\config\route.php里,改为
  Router::connect('/', array('controller' => 'questions', 'action' => 'home'));
  
 

3 比如自定义验证器的编写
    在usermodel中
function checkUnique($data, $fieldName) {
$valid = false;
if(isset($fieldName) && $this->hasField($fieldName)) {
$valid = $this->isUnique(array($fieldName => $data));
}
return $valid;
}

'unique' => array(
'rule' => array('checkUnique', 'username'),
'message' => 'User name taken. Use another'
)

4 function beforeFilter(){
$this->Auth->allow('signup');
}
  该filter在各个action前先执行,象JAVA中的过滤器了。allow则允许哪些action是可以不经过auth验证就执行的。

 

5
 在app目录下写个app_controller.php,其他类继承它
function beforeFilter(){
$this->Auth->loginRedirect = array('controller'
=> 'questions', 'action' => 'home');

$this->Auth->logoutRedirect = array('controller'
=> 'questions', 'action' => 'home');

$this->Auth->allow('signup', 'confirm', 'home', 'show');
$this->Auth->authorize = 'controller';
$this->Auth->userScope = array('User.confirmed' => '1');
$this->set('loggedIn', $this->Auth->user('id'));
}


function isAuthorized() {
return true;
}

  其中$this->Auth->loginRedirect,$this->Auth->logoutRedirect指出登陆成功,退出后的路径了。
userScope指明当某个条件成立时,才允许登陆,否则不允许
$this->set('loggedIn', $this->Auth->user('id'));把登陆后的用户id放到loggedin,以方便VIEW层去用。
比如可以这样,在模版里

   <?php if($loggedIn): ?>
    。。。。。
 <?php else?>
  .....
<?php end if;?>


isAuthorized()是必须有的,这里可以写些成功验证后的函数,无的话这里可以return true

   然后在user_controll里的login,logout可以这样写。
 function login() {
}


function logout() {
$this->Session->setFlash('Logout');
$this->redirect($this->Auth->logout());
}


6 使用cookie
   <?php
class AppController extends Controller {
var $components = array('Auth', 'Cookie');
  ...
   在appcontrol中,设置
   $this->Auth->autoRedirect = false;
$this->Cookie->name = 'QuickWall';

if(!$this->Auth->user('id')) {
     $cookie = $this->Cookie->read('User');
     if($cookie) {
      $this->Auth->login($cookie);
     }
    }

 

 其中  $this->Auth->autoRedirect默认为true,这里为false,即代表要登陆成功后,
要到login中去,就是
  function login() {
if ($this->Auth->user()) {
if (!empty($this->data)) {
if (empty($this->data['User']['remember_me'])) {
$this->Cookie->del('User');
} else {
$cookie = array();
$cookie['username'] = $this->data['User']
['username'];
$cookie['password'] = $this->data['User']
['password'];
$this->Cookie->write('User', $cookie, true,
'+2 weeks');
}
unset($this->data['User']['remember_me']);
}
$this->redirect($this->Auth->redirect());

 

  

7 使用javascript
   增加helper,比如在appcontroller中:
    var $helpers = array('Html', 'Form', 'Javascript');
  在layout中增加
    <?php e($javascript->link('prototype-1.6.0.2')); ?>
 <?php e($scripts_for_layout); ?>
  把prototype.js等放到app/webroot/js目录下

 

 

posted on 2008-10-06 13:35  jackyrong的世界  阅读(997)  评论(0编辑  收藏  举报