将yii集成到Wordpress中

时间:2013-04-28 12:57:17

标签: wordpress authentication yii

我有一个使用gii创建的yii CRUD,我想将它集成到WP管理员部分。

我已经看过一些教程,围绕将wordpress集成到yii的控制器/路由器中,但由于我的应用程序非常小而且我的WP已经正常工作,我想反过来做。基本上我想做的是将WP身份验证集成到yii的模块中。

有没有关于如何做到这一点的教程?什么是最干净最简单的方式?

2 个答案:

答案 0 :(得分:1)

您可以使用类似WPUser的东西扩展CWebUser,唯一必需的函数是getIsGuest和getName或类似的东西。

所以,您基本上可以像使用普通的CWebUser一样构建所有身份验证,但是对wp_函数有点困惑,以使一切正常。

基本上这些功能; http://codex.wordpress.org/Function_Reference/wp_get_current_user http://codex.wordpress.org/Class_Reference/WP_User

使用WP_User,您可以模拟yii用户和RBAC等,查看IWebUser以了解您的用户类需要工作的内容:http://www.yiiframework.com/doc/api/1.1/IWebUser

要在wordpress中包含yii,您唯一需要做的就是制作一个模板并在内容中包含/yii-app/index.php,一切都会正常工作。

这有点短,因为我赶时间。如果您需要更多帮助,我可以在明天左右返回代码,我为这样的项目编写了代码。

答案 1 :(得分:0)

这是一个简单的类,它将WordPress的API包装到Yii基于角色的auth管理器中 - 在控制器中,您将指定要检查的“角色”(a.k.a.WordPress功能)。

<?php public function accessRules()
{
    return array(
        array('allow',
            'actions'=>array('index','view'),
            'roles'=>array('publish_posts') 
            //WordPress capability check. 
            //  See @link http://codex.wordpress.org/Roles_and_Capabilities
        ),
 }
 ?>

这是您的新用户类,需要在您的Yii配置文件中添加到components =&gt;部分中。 user =&gt; class ='wpUser'。这将取代Yii的默认CWebUser(未在配置数组中指定 - 默认情况下已加载)。另外 - 你需要删除“allowAutoLogin”=&gt;从数组中获得true。

<?php
class wpUser extends CApplicationComponent implements IWebUser, IApplicationComponent {
        public function init ()
        {
            parent::init();
        }
        function checkAccess ($operation, $params = array()) {
            return current_user_can($operation);
        }
        function getId() {
            return get_current_user_id();
        }
        function getIsGuest () {
            $is_user_logged_in = is_user_logged_in();
            return ! $is_user_logged_in;
        }
        function getName () {
            $name = wp_get_current_user()->user_login;
            return $name;
        }
        public function loginRequired()
        {
            wp_login_form(array('redirect' => Yii::app()->getRequest()->getUrl()));
        }
    }
?>

Published on Yii's Wiki