摘要:1、创建基础控制器
基础控制器的作用:类似的控制器操作或者扩展都可以放到基础控制器里,后面新建的控制器只需继承基础控制器就可以使用基础控制器里的方法了。
1、创建基础控制器
基础控制器的作用:类似的控制器操作或者扩展都可以放到基础控制器里,后面新建的控制器只需继承基础控制器就可以使用基础控制器里的方法了。
#基础控制器路径,base为文件夹,用来存放控制器通用操作或者扩展 #frontend/controllers/base #基础控制器创建好后记得把controllers下的SiteControllers 继承的Controller改成BaseController <?php namespace frontend\controllers\base; /** * 基础控制器 */ use yii\web\Controller; class BaseController extends Controller { public function beforeAction($action) { if (!parent::beforeAction($action)){ return false; } return true; } }
2、创建文章控制器(PostsControllers)并继承基础控制器
#文章控制器创建位置: #frontend/controllers <?php namespace frontend\controllers; /** * 文章控制器 */ use Yii; use frontend\controllers\base\BaseController; class PostsController extends BaseController { public function actionIndex() { echo 'post action index'; return $this->render('index'); } }
3、创建文章渲染视图用以显示文章列表
文章渲染视图创建位置:
frontend/views
在views下创建文件夹posts(这里的posts文件夹名要与控制器的posts名对应,忽略大小写,同时和对应的数据表名也保持一致),views视图下一个文件夹对应一个控制器,相应的渲染页面放在这个文件夹内。在第二步中我们创建了一个actionIndex方法,同时将该方法内数据渲染到index页面下,所以现在还需在posts文件夹内创建index.php文件,如此actionIndex内的数据才能正常渲染到页面。
我们可以访问下数据渲染是否正常
从源码中可以看到actionIndex中输出的'post action index' 确实输出在页面中了,说明控制器和页面渲染都没问题。
目录结构对照图:
文章控制器创建完成,这里顺便将数据表也一起创建,方便后续操作
//文章表,用于存放文章信息的数据表 CREATE TABLE posts ( id int(11) NOT NULL AUTO_INCREMENT COMMENT '自增ID', title varchar(255) DEFAULT NULL COMMENT '标题', summary varchar(255) DEFAULT NULL COMMENT '摘要', content text COMMENT '内容', label_img varchar(255) DEFAULT NULL COMMENT '标签图', cat_id int(11) DEFAULT NULL COMMENT '分类id', user_id int(11) DEFAULT NULL COMMENT '用户id', user_name varchar(255) DEFAULT NULL COMMENT '用户名', is_valid tinyint(1) DEFAULT '0' COMMENT '是否有效:0-未发布 1-已发布', created_at int(11) DEFAULT NULL COMMENT '创建时间', updated_at int(11) DEFAULT NULL COMMENT '更新时间', PRIMARY KEY (id), KEY idx_cat_valid (cat_id,is_valid) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=111 DEFAULT CHARSET=utf8 COMMENT='文章主表';
//文章分类表 CREATE TABLE cats ( id int(11) NOT NULL AUTO_INCREMENT COMMENT '自增ID', cat_name varchar(255) DEFAULT NULL COMMENT '分类名称', PRIMARY KEY (id) ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COMMENT='分类表';
//标签表 存放tags 以及tags对应的文章数 CREATE TABLE tags ( id int(11) NOT NULL AUTO_INCREMENT COMMENT '自增ID', tag_name varchar(255) DEFAULT NULL COMMENT '标签名称', post_num int(11) DEFAULT '0' COMMENT '关联文章数', PRIMARY KEY (id), UNIQUE KEY tag_name (tag_name) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=36 DEFAULT CHARSET=utf8 COMMENT='标签表';
//文章和标签对应关系表 多对多 CREATE TABLE `relation_post_tags` ( id int(11) NOT NULL AUTO_INCREMENT COMMENT '自增ID', post_id int(11) DEFAULT NULL COMMENT '文章ID', tag_id int(11) DEFAULT NULL COMMENT '标签ID', PRIMARY KEY (id), UNIQUE KEY post_id (post_id,tag_id) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=66 DEFAULT CHARSET=utf8 COMMENT='文章和标签关系表';