您的位置:首页 > 编程语言 > PHP开发

cakephp 学习小结 6

2014-11-14 16:31 246 查看
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目录下
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: