扩展gii时遇到一个小问题。 [ 2.0 版本 ]
想在Controller生成器中自定义layout。
于是我进行了如下操作:
在blog/vendor/yiisoft/yii2-gii/generators/controller/Generator.php里面加入如下代码
/**
* @var string 自定义样式名称,默认就是继承原有的父模板
*/
public $layouts = 'default';
/**
* @inheritdoc
*/
public function getLayouts()
{
return $this->layouts;
}
在form.php里面加入如下代码
echo $form->field($generator, 'layouts');
将blog/vendor/yiisoft/yii2-gii/generators/controller/default/controller.php修改为
<?php
/**
* This is the template for generating a controller class file.
*/
use yii\helpers\Inflector;
use yii\helpers\StringHelper;
/* @var $this yii\web\View */
/* @var $generator yii\gii\generators\controller\Generator */
echo "<?php\n";
?>
namespace <?= $generator->getControllerNamespace() ?>;
class <?= StringHelper::basename($generator->controllerClass) ?> extends <?= '\\' . trim($generator->baseClass, '\\') . "\n" ?>
{
<?php foreach ($generator->getActionIDs() as $action): ?>
public function action<?= Inflector::id2camel($action) ?>()
{
<?=$generator->getLayouts()=='default'?'':'$layouts = \''.$generator->getLayouts().'\''; ?>
return $this->render('<?= $action ?>');
}
<?php endforeach; ?>
}
主要是加入了这一句话
<?=$generator->getLayouts()=='default'?'':'$layouts = \''.$generator->getLayouts().'\''; ?>
虽然界面有了我的选项,并且POST传值成功,但是获取的值一直不对,生成的代码也一直是默认值。不是我POST过去的内容。
x9-sec 补充于 2017-09-13 18:11
如果有更好的办法,欢迎指正。刚开始学习yii,难免有好多不了解yii的地方。
x9-sec 补充于 2017-09-16 10:34
导致这个问题是。。我没重启服务器。。有缓存。。。
共 1 个回答
-
我想你使用 Gii 的方法存在问题。如果你要自定义 Gii, 不要在
vendor/yiisoft/yii2-gii
内直接修改,而是参照官方的建议去做,具体参考一下 YiiChina 上这个贴子:大家在实际开发中经常用Gii生产代码吗?如果用了一些后台模板,那生产的代码样式怎么处理?从你描述看,你是想针对某些特定的动作使用特定的 layout, 这个需求还没到使用 Gii 的地步。手动在对应的动作方法内声明一下即可:
public function actionIndex() { $this->layout = 'xxx'; // ... }
如果你想让控制器下所有动作都使用该自定义 layout, 设置如下:
class OrderController extends Controller { public $layout = 'xxx'; }
共 1 条回复
x9-sec
注册时间:2017-09-13
最后登录:2020-09-18
在线时长:6小时22分
最后登录:2020-09-18
在线时长:6小时22分
- 粉丝0
- 金钱100
- 威望0
- 积分160