Yii2的相关学习记录,自定义gii模板和引用vendor中的js、css(四),yii2gii_PHP教程
Yii2的相关学习记录,自定义gii模板和引用vendor中的js、css(四),yii2gii
上文中后台模板框架已经搭建起来了,但还是有些不协调,像是有两个User标题,或者我们想自己在gii生成时添加或删除些公用的东西。这就需要我们定义自己的gii模板。
我们以CRUD的模板为例,默认的gii模板位置是在:vendor/yiisoft/yii2-gii/generators/crud的default目录下,我们当然可以在此新建一个和default并列的目录,但是并不推荐在这里新建,因为这里是vendor目录,正如上章所说的,vendor目录下的东西尽量不要去更改,这样你在git发布时或团队共享时不需要提交vendor目录,比较方便。
正确的方法是,将default文件夹复制出来,移动到你想移动到的位置,我这里移动到了backend/views/gii/crud目录下,然后更改改backend/common/main-local.php下的gii配置:
<span>$config</span>['bootstrap'][] = 'gii'<span>; </span><span>$config</span>['modules']['gii'] =<span> [ </span>'class' => 'yii\gii\Module', 'generators' => [ <span>//</span><span>here</span> 'crud' => [ <span>//</span><span> generator name</span> 'class' => 'yii\gii\generators\crud\Generator', <span>//</span><span> generator class</span> templates'<span> => [ //setting for out templates </span>'vishun' => '@backend/views/gii/crud/<span>default</span>'<span>, // template name => path to template ] ] ], ]; </span>
这样,再访问gii中的CRUD生成器就会发现多了一个选择:(如果改的是backend的配置,那么只能通过后台的url访问gii才会出现多出来的选项)
记得要改拷贝过来的内容,例如删除掉多出来的标题什么的,然后重新生成一遍,就可以看到改变后的效果了。如果是团队合作,也应该将这个写入到环境中去。
再说下AdminLTE,我们在其官方演示站时,会发现模板集成了很多的漂亮功能,例如在Forms/Advanced Elements中select2,下拉菜单是箭头的样式。用firebug查看其css编发现引用了select2.min.css这个css。再回到我们自己的站点同样看下,便会发现我们站点没有这么一个css。所以我们要着手将其引入,但在此之前,需要先了解Yii2中如何在页面中引入js或者css。下面以引入js为例,css与此相同:
方法一、直接同在html中一样:(不建议使用,会导致依赖顺序错乱)
<span>//</span><span>外部js文件</span> <script src="你的js路径/plugins/select2/select2r.min.js"> <span>//</span><span>或者</span> <?=Html::jsFile('你的js路径/plugins/select2/select2r.min.js')?> <span>//</span><span>内部js</span> <script> <span>var</span> a='abc' </script>
方法二、用$this->registerJs
和$this->registerJsFile
方法(可控依赖顺序,但是引入外部js时建议用方法三)
<span>$this</span>->registerJs("var options = ".json_encode(<span>$options</span>).";", View::POS_END, 'my-options');<span>//</span><span>引入内部js</span> <span>$this</span>->registerJsFile('http://example.com/js/main.js', ['depends' => [\yii\web\JqueryAsset::className()]]);<span>//</span><span>引入外部js文件</span>
方法三、引入外部js式时,利用Yii2新功能注册资源包来部署(功能更强大,例如可以转换less,压缩合并等),可参照backend/assets/AppAsset.php文件:
<span>namespace backend\assets; </span><span>use</span><span> yii\web\AssetBundle; </span><span>class</span> AppAsset <span>extends</span><span> AssetBundle { </span><span>public</span> <span>$basePath</span> = '@webroot'<span>; </span><span>public</span> <span>$baseUrl</span> = '@web'<span>; </span><span>public</span> <span>$css</span> =<span> [ </span>'css/site.css',<span> ]; </span><span>public</span> <span>$js</span> =<span> [ ]; </span><span>public</span> <span>$depends</span> =<span> [ </span>'yii\web\YiiAsset', 'yii\bootstrap\BootstrapAsset',<span> ]; }</span>
定义此类后,在视图文件中:
backend\assets\AppAsset::register(<span>$this</span>);
即可将定义的site.css以及关联的'yii\web\YiiAsset'和'yii\bootstrap\BootstrapAsset'定义的css和js引入。更多功能请看YII2权威指南中的“客户端脚本”和“资源”两个章节。
既然已了解以上引入方法,可以继续我们引入select2的计划,我们先看下我们站点引入了哪些资源,在你copy后的layouts/main.php中:
<span>if</span> (<span>class_exists</span>('backend\assets\AppAsset'<span>)) { backend\assets\AppAsset</span>::register(<span>$this</span><span>); } </span><span>else</span><span> { app\assets\AppAsset</span>::register(<span>$this</span><span>); } dmstr\web\AdminLteAsset</span>::register(<span>$this</span>);
先是注册了本来就有的AppAsset,然后又注册了dmstr\web命名空间下的AdminLteAsset,我们追溯到此文件下就会发现里面只引入了vendor/almasaeed2010/dist文件中的AdminLTE.min.css和变动的*.min.css这两个css文件(almasaeed2010文件是我们compose下载yii2-adminlte-asset自动下载的依赖文件),但我们打开vendor/almasaeed2010/adminlte/plugins下,会发现还有很多的功能,我们上方提到的select2也在其中。我们当然可以在AdminLteAsset.php的平级建立Select2Asset.php文件,但理由同上方gii模板时说的,最好不要改动vendor下的文件,所以我们将此文件建立在backend/assets中,具体文件内容可参考:
<?<span>php namespace backend\assets; </span><span>use</span><span> yii\web\AssetBundle; </span><span>class</span> Select2Asset <span>extends</span><span> AssetBundle { </span><span>public</span> <span>$sourcePath</span> = '@vendor/almasaeed2010/adminlte/plugins/select2';<span>//</span><span>路径</span> <span>public</span> <span>$css</span> =<span> [ </span>'select2.min.css',<span>//</span><span>css</span> <span> ]; </span><span>public</span> <span>$js</span> =<span> [ </span>'select2.min.js'<span>//</span><span>js</span> <span> ]; </span><span>public</span> <span>$depends</span> =<span> [ </span>'dmstr\web\AdminLteAsset',<span>//</span><span>依赖关系</span> <span> ]; }</span>
同时在layouts/main.php中:
backend\assets\Select2Asset::register(<span>$this</span><span>); </span><span>//</span><span> dmstr\web\AdminLteAsset::register($this);</span>
可以将AdminLteAsset这行注释掉,因为我们在Select2Asset中写明了依赖AdminLteAsset,所以会自动注册依赖文件的css和js,这时我们再次查看元素,就会发现多了select2.min.css和select2.min.js,有了这两个我们便可以使用三角样式的下拉菜单了。
以上就这样了,睡觉先。

PHPSession失效的原因包括配置错误、Cookie问题和Session过期。1.配置错误:检查并设置正确的session.save_path。2.Cookie问题:确保Cookie设置正确。3.Session过期:调整session.gc_maxlifetime值以延长会话时间。

在PHP中调试会话问题的方法包括:1.检查会话是否正确启动;2.验证会话ID的传递;3.检查会话数据的存储和读取;4.查看服务器配置。通过输出会话ID和数据、查看会话文件内容等方法,可以有效诊断和解决会话相关的问题。

多次调用session_start()会导致警告信息和可能的数据覆盖。1)PHP会发出警告,提示session已启动。2)可能导致session数据意外覆盖。3)使用session_status()检查session状态,避免重复调用。

在PHP中配置会话生命周期可以通过设置session.gc_maxlifetime和session.cookie_lifetime来实现。1)session.gc_maxlifetime控制服务器端会话数据的存活时间,2)session.cookie_lifetime控制客户端cookie的生命周期,设置为0时cookie在浏览器关闭时过期。

使用数据库存储会话的主要优势包括持久性、可扩展性和安全性。1.持久性:即使服务器重启,会话数据也能保持不变。2.可扩展性:适用于分布式系统,确保会话数据在多服务器间同步。3.安全性:数据库提供加密存储,保护敏感信息。

在PHP中实现自定义会话处理可以通过实现SessionHandlerInterface接口来完成。具体步骤包括:1)创建实现SessionHandlerInterface的类,如CustomSessionHandler;2)重写接口中的方法(如open,close,read,write,destroy,gc)来定义会话数据的生命周期和存储方式;3)在PHP脚本中注册自定义会话处理器并启动会话。这样可以将数据存储在MySQL、Redis等介质中,提升性能、安全性和可扩展性。

SessionID是网络应用程序中用来跟踪用户会话状态的机制。1.它是一个随机生成的字符串,用于在用户与服务器之间的多次交互中保持用户的身份信息。2.服务器生成并通过cookie或URL参数发送给客户端,帮助在用户的多次请求中识别和关联这些请求。3.生成通常使用随机算法保证唯一性和不可预测性。4.在实际开发中,可以使用内存数据库如Redis来存储session数据,提升性能和安全性。

在无状态环境如API中管理会话可以通过使用JWT或cookies来实现。1.JWT适合无状态和可扩展性,但大数据时体积大。2.Cookies更传统且易实现,但需谨慎配置以确保安全性。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器