Yii2 中 gii yii2.0 gii生成代码的模型怎么放在 common 中的 models 目录

当前位置:
yii2 Gii CURD生成的views文件不存在是怎么回事?
yii2 Gii CURD生成的views文件不存在是怎么回事?
来源:网络整理&&&&&时间: 23:00:02&&&&&关键词:views,是怎么回事
关于网友提出的“yii2 Gii CURD生成的views文件不存在是怎么回事?”问题疑问,本网通过在网上对“yii2 Gii CURD生成的views文件不存在是怎么回事?”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题:yii2 Gii CURD生成的views文件不存在是怎么回事?
描述:使用yii2的CRUD Generator生成的views相关文件并不存在,但显示生成成功,而且还可以预览,不知道是怎么回事?生成成功views相关的文件并不存在预览其中其中一个文件解决方案1:是不是phpstorm没有同步文件?解决方案2:看报的错,访问控制器。
以上介绍了“yii2 Gii CURD生成的views文件不存在是怎么回事?”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/1056221.html
上一篇: 下一篇:Yii2使用 Gii 生成文章增删改查代码
Yii2使用 Gii 生成文章增删改查代码
标签(空格分隔): Yii2
本文使用Yii2 高级模板,参考
1 生成 ActiveRecord
创建 table
登陆数据库,运行以下sql
create table if not exists `news`(
unsigned auto_increment,
varchar(50)
`created_at`
timestamp,
`updated_at`
timestamp,
primary key (`id`)
)engine=innodb default charset=utf8
生成 NewsModel
在浏览器地址栏输入
http://admin.baojia.local/index.php?r=gii
火狐截图_T13-35-50.719Z.png
选择 “Model Generator” (点击 Gii 首页的链接)去生成 Model:
Table Name: news
Model Class: News
NameSpace:common\models
火狐截图_T13-04-35.885Z.png
然后点击 “Preview” 按钮。你会看到 common/models/News.php 被列在将要生成的文件列表中。可以点击文件名预览内容。
如果你已经创建过同样的文件, 使用 Gii 可以覆盖它, 点击文件名旁边的 diff 能查看现有文件与将要生成的文件的内容区别。
火狐截图_T13-12-01.610Z.png
想要覆盖已存在文件,选中 “overwrite” 下的复选框然后点击 “Generator”。如果是新文件,只点击 “Generator” 就好。
接下来你会看到一个包含已生成文件的说明页面。如果生成过程中覆写过文件, 还会有一条信息说明代码是重新生成覆盖的。
2 生成 CRUD 代码
CRUD 代表增,查,改,删操作,这是绝大多数 Web 站点常用的数据处理方式。选择 Gii 中的 “CRUD Generator” (点击 Gii 首页的链接)去创建 CRUD 功能。本例 “news” 中需要这样填写表单:
Model Class: common\models\News
Search Model Class: common\models\NewsSearch
Controller Class: backend\controllers\NewsController
火狐截图_T13-16-41.348Z.png
然后点击 “Preview” 按钮。你会看到下述将要生成的文件列表。
火狐截图_T13-17-55.309Z.png
如果你之前创建过 backend\controllers\NewsController 和
backend/views/news/index.php 文件, 选中 “overwrite” 下的复选框覆写它们(之前的文件没能全部支持 CRUD)。
在浏览器中输入以下URL
http://admin.baojia.local/index.php?r=news%2Findex
火狐截图_T13-24-05.313Z.png
火狐截图_T13-25-35.929Z.png
火狐截图_T13-26-44.282Z.png
Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智能路由,微代理,控制总线)。分布式系统的协调导致了样板模式, 使用Spring Cloud开发人员可以快速地支持实现这些模式的服务和应用程序。他们将在任何分布式...
前言 本文参考转发摘自:【郭霖博客】http://blog.csdn.net/guolin_blog?viewmode=contents 强烈建议进入原博客查看学习 1、数据存储操作 通过学习,学会了创建表、升级表、以及建立表关联,接下来就是对数据库的CRUD操作了。其中L...
百战程序员_ Java1573题 QQ群:034603 掌握80%年薪20万掌握50%年薪10万 全程项目穿插, 从易到难,含17个项目视频和资料持续更新,请关注www.itbaizhan.com 国内最牛七星级团队马士兵、高淇等11位十年开发经验专...
AFNetworking网络请求组件SDWebImage多个缩略图缓存组件FMDB本地数据库组件UICKeyChainStore存放用户账号密码组件Reachability监测网络状态DateTools友好化时间MBProgressHUD一款提示框第三方库MWPhotoBr...
用到的组件1、通过CocoaPods安装项目名称项目信息AFNetworking网络请求组件FMDB本地数据库组件SDWebImage多个缩略图缓存组件UICKeyChainStore存放用户账号密码组件Reachability监测网络状态DateTools友好化时间MBP...
出生在秋季的我特别喜欢冬天,喜欢它的寒冷,喜欢它的萧条,喜欢它寒风刺骨的感觉! 生活在海边的城市,虽然是北方但是下雪都是一种奢望! 年初下了一场大雪,晚上回家路过一所小学,虽然天已黑,但是白皑皑的雪被路灯和月光映照着闪闪发光,正好赶上孩子们放寒假校园里没有人,心想明天早晨一...
一天孩子问,爸爸,我以后一定要赚钱吗?哗,这是一个好问题。这个问题,我想了好几天。每天我都试着回答一点点,最后,我终于整理出一个简单的结论给孩子—— 这个世界上,大家过日子的方法都不太一样,不过,大致可以归类成两种。
一种人,是在“闯”人生。另一种人,是在...
走在中国经济前茅的大深圳,城市非常美丽,天气却不太美丽,尤其在七八九这三个月的汛期,前一阵子还是万里晴空,下一秒就倾盆暴雨也是见怪不怪的景象。更遑论一个月频繁造访各种级别的台风。台风来了,对于深圳的夏天来说,热,那是真的热,热还不是普通的热,在不开空调的前提下,人就像困在高...
日坐云霄案,神游适四方。 藏边山耸立,塞北雪飘扬。 东海波涛壮,南彊稻穗香。 生活虽苟且,岁岁赋辞章。
摆在桌上的 我有一堆的玻璃器皿 装水,沏茶还可以 倾斜身子倚靠,却 哗啦,碎了一地 别抱怨 还不是 彼此都是玻璃Gii 是一个蛮不错的学习Module
console 生成model的解析:
gii的config配置
* return [
'bootstrap' =& ['gii'],
'modules' =& [
'gii' =& ['class' =& 'yii\gii\Module'],
也就说,在初始化的时候需要执行Module的bootstrap方法:
public function bootstrap($app)
if ($app instanceof \yii\web\Application) {
$app-&getUrlManager()-&addRules([
$this-&id =& $this-&id . '/default/index',
$this-&id . '/&id:\w+&' =& $this-&id . '/default/view',
$this-&id . '/&controller:[\w\-]+&/&action:[\w\-]+&' =& $this-&id . '/&controller&/&action&',
], false);
} elseif ($app instanceof \yii\console\Application) {
$app-&controllerMap[$this-&id] = [
'class' =& 'yii\gii\console\GenerateController',
'generators' =& array_merge($this-&coreGenerators(), $this-&generators),
'module' =& $this,
如果是console的话,就设置app的controllerMap。也就是console的Gii/访问路径:
yii\gii\console\GenerateController。
传递参数:generators:
protected function coreGenerators()
'model' =& ['class' =& 'yii\gii\generators\model\Generator'],
'crud' =& ['class' =& 'yii\gii\generators\crud\Generator'],
'controller' =& ['class' =& 'yii\gii\generators\controller\Generator'],
'form' =& ['class' =& 'yii\gii\generators\form\Generator'],
'module' =& ['class' =& 'yii\gii\generators\module\Generator'],
'extension' =& ['class' =& 'yii\gii\generators\extension\Generator'],
还有一部分就是config配置中对gii的 generators 参数的配置,也就是可以自定义gii了。
生成model的命令为:
./yii gii/model --tableName=city --modelClass=City
也就是找到 yii\gii\console\GenerateController。 去找actionModel()方法,但是这个方法不存在,那么,在actions中查找
public function actions()
$actions = [];
foreach ($this-&generators as $name =& $generator) {
$actions[$name] = [
'class' =& 'yii\gii\console\GenerateAction',
'generator' =& $generator,
从上面可以看出来,就是通过GenerateAction这个class,根据穿入的generator的不同实例化不同的参数。这个generator参数就是上面的配置
'model' =& ['class' =& 'yii\gii\generators\model\Generator'],
下面我们查看这个文件
yii\gii\console\GenerateAction
的run方法:
public function run()
echo "Running '{$this-&generator-&getName()}'...\n\n";
if ($this-&generator-&validate()) {
$this-&generateCode();
$this-&displayValidationErrors();
也就是代码:
$this-&generateCode();
protected function generateCode()
$files = $this-&generator-&generate();
$n = count($files);
if ($n === 0) {
echo "No code to be generated.\n";
echo "The following files will be generated:\n";
$skipAll = $this-&controller-&interactive ? null : !$this-&controller-&
$answers = [];
foreach ($files as $file) {
$path = $file-&getRelativePath();
if (is_file($file-&path)) {
if (file_get_contents($file-&path) === $file-&content) {
' . $this-&controller-&ansiFormat('[unchanged]', Console::FG_GREY);
echo $this-&controller-&ansiFormat(" $path\n", Console::FG_CYAN);
$answers[$file-&id] =
' . $this-&controller-&ansiFormat('[changed]', Console::FG_RED);
echo $this-&controller-&ansiFormat(" $path\n", Console::FG_CYAN);
if ($skipAll !== null) {
$answers[$file-&id] = !$skipA
$answer = $this-&controller-&select("Do you want to overwrite this file?", [
'y' =& 'Overwrite this file.',
'n' =& 'Skip this file.',
'ya' =& 'Overwrite this and the rest of the changed files.',
'na' =& 'Skip this and the rest of the changed files.',
$answers[$file-&id] = $answer === 'y' || $answer === 'ya';
if ($answer === 'ya') {
$skipAll =
} elseif ($answer === 'na') {
$skipAll =
' . $this-&controller-&ansiFormat('[new]', Console::FG_GREEN);
echo $this-&controller-&ansiFormat(" $path\n", Console::FG_CYAN);
$answers[$file-&id] =
if (!array_sum($answers)) {
$this-&controller-&stdout("\nNo files were chosen to be generated.\n", Console::FG_CYAN);
if (!$this-&controller-&confirm("\nReady to generate the selected files?", true)) {
$this-&controller-&stdout("\nNo file was generated.\n", Console::FG_CYAN);
if ($this-&generator-&save($files, (array) $answers, $results)) {
$this-&controller-&stdout("\nFiles were generated successfully!\n", Console::FG_GREEN);
$this-&controller-&stdout("\nSome errors occurred while generating the files.", Console::FG_RED);
echo preg_replace('%&span class="error"&(.*?)&/span&%', '\1', $results) . "\n";
$files = $this-&generator-&generate();
generator就是上面的:
'model' =& ['class' =& 'yii\gii\generators\model\Generator'],
也就是这个文件的generate()方法返回的内容,就是文件内容:
public function generate()
$files = [];
$relations = $this-&generateRelations();
$db = $this-&getDbConnection();
foreach ($this-&getTableNames() as $tableName) {
// model :
$modelClassName = $this-&generateClassName($tableName);
$queryClassName = ($this-&generateQuery) ? $this-&generateQueryClassName($modelClassName) :
$tableSchema = $db-&getTableSchema($tableName);
$params = [
'tableName' =& $tableName,
'className' =& $modelClassName,
'queryClassName' =& $queryClassName,
'tableSchema' =& $tableSchema,
'labels' =& $this-&generateLabels($tableSchema),
'rules' =& $this-&generateRules($tableSchema),
'relations' =& isset($relations[$tableName]) ? $relations[$tableName] : [],
$files[] = new CodeFile(
Yii::getAlias('@' . str_replace('\\', '/', $this-&ns)) . '/' . $modelClassName . '.php',
$this-&render('model.php', $params)
// query :
if ($queryClassName) {
$params = [
'className' =& $queryClassName,
'modelClassName' =& $modelClassName,
$files[] = new CodeFile(
Yii::getAlias('@' . str_replace('\\', '/', $this-&queryNs)) . '/' . $queryClassName . '.php',
$this-&render('query.php', $params)
生成文件的部分:
$this-&render('model.php', $params)
public function render($template, $params = [])
$view = new View();
$params['generator'] = $
return $view-&renderFile($this-&getTemplatePath() . '/' . $template, $params, $this);
在这里可以看到,还是用的view的renderFile来生成的:
public function renderFile($viewFile, $params = [], $context = null)
$viewFile = Yii::getAlias($viewFile);
if ($this-&theme !== null) {
$viewFile = $this-&theme-&applyTo($viewFile);
if (is_file($viewFile)) {
$viewFile = FileHelper::localize($viewFile);
throw new InvalidParamException("The view file does not exist: $viewFile");
$oldContext = $this-&
if ($context !== null) {
$this-&context = $
$output = '';
$this-&_viewFiles[] = $viewF
if ($this-&beforeRender($viewFile, $params)) {
Yii::trace("Rendering view file: $viewFile", __METHOD__);
$ext = pathinfo($viewFile, PATHINFO_EXTENSION);
if (isset($this-&renderers[$ext])) {
if (is_array($this-&renderers[$ext]) || is_string($this-&renderers[$ext])) {
$this-&renderers[$ext] = Yii::createObject($this-&renderers[$ext]);
/* @var $renderer ViewRenderer */
$renderer = $this-&renderers[$ext];
$output = $renderer-&render($this, $viewFile, $params);
$output = $this-&renderPhpFile($viewFile, $params);
$this-&afterRender($viewFile, $params, $output);
array_pop($this-&_viewFiles);
$this-&context = $oldC
最终生成内容。
下面查看对应的model.php文件:
yii2-gii/generators/model/default/model.php
* This is the template for generating the model class of a specified table.
/* @var $this yii\web\View */
/* @var $generator yii\gii\generators\model\Generator */
/* @var $tableName string full table name */
/* @var $className string class name */
/* @var $queryClassName string query class name */
/* @var $tableSchema yii\db\TableSchema */
/* @var $labels string[] list of attribute labels (name =& label) */
/* @var $rules string[] list of validation rules */
/* @var $relations array list of relations (name =& relation declaration) */
echo "&?php\n";
namespace &?= $generator-&ns ?&;
* This is the model class for table "&?= $generator-&generateTableName($tableName) ?&".
&?php foreach ($tableSchema-&columns as $column): ?&
* @property &?= "{$column-&phpType} \${$column-&name}\n" ?&
&?php if (!empty($relations)): ?&
&?php foreach ($relations as $name =& $relation): ?&
* @property &?= $relation[1] . ($relation[2] ? '[]' : '') . ' $' . lcfirst($name) . "\n" ?&
class &?= $className ?& extends &?= '\\' . ltrim($generator-&baseClass, '\\') . "\n" ?&
* @inheritdoc
public static function tableName()
return '&?= $generator-&generateTableName($tableName) ?&';
&?php if ($generator-&db !== 'db'): ?&
* @return \yii\db\Connection the database connection used by this AR class.
public static function getDb()
return Yii::$app-&get('&?= $generator-&db ?&');
* @inheritdoc
public function rules()
return [&?= "\n
" . implode(",\n
", $rules) . "\n
* @inheritdoc
public function attributeLabels()
&?php foreach ($labels as $name =& $label): ?&
&?= "'$name' =& " . $generator-&generateString($label) . ",\n" ?&
&?php foreach ($relations as $name =& $relation): ?&
* @return \yii\db\ActiveQuery
public function get&?= $name ?&()
&?= $relation[0] . "\n" ?&
&?php if ($queryClassName): ?&
$queryClassFullName = ($generator-&ns === $generator-&queryNs) ? $queryClassName : '\\' . $generator-&queryNs . '\\' . $queryClassN
echo "\n";
* @inheritdoc
* @return &?= $queryClassFullName ?& the active query used by this AR class.
public static function find()
return new &?= $queryClassFullName ?&(get_called_class());
也就是一个模板文件生成而来。
OK,到这里就完成了流程的查看了。分享给朋友:通用代码: <input id="link4" type="text" class="form_input form_input_s" value="" />复 制flash地址: 复 制html代码: <input type="text" class="form_input form_input_s" id="link3" value="" />复 制[Yii视频教程]2-YiiFrameWork用gii生成模型和控制器下载至电脑扫码用手机看用或微信扫码在手机上继续观看二维码2小时内有效[Yii视频教程]2-YiiFrameWork用gii生成模型和控制器扫码用手机继续看用或微信扫码在手机上继续观看二维码2小时内有效,扫码后可分享给好友没有优酷APP?立即下载请根据您的设备选择下载版本 药品服务许可证(京)-经营- 请使用者仔细阅读优酷、、、、和Copyright(C)2017 优酷 youku.com 版权所有不良信息举报电话:yii2中的gii怎么创建controller_百度知道
yii2中的gii怎么创建controller
我有更好的答案
应该是权限问题(无法创建目录)要么把整个项目可写(不推荐)要么把目录权限付给执行php的进程用户:比如我用的是php-fpm,配置php-fpm.conf(忘记名字了,应该在php安装目录的etc目录下)中的user是nobody,你把目录的权限分给这个用户即可(你也可以分给你当前的用户和用户组)
第二步,请确保你有访问gii的权限
为您推荐:
其他类似问题
&#xe675;换一换
回答问题,赢新手礼包&#xe6b9;
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。

我要回帖

更多关于 yii2.0 gii生成module 的文章

 

随机推荐