October/WinterCMS避坑指南

正式使用WinterCMS开始了第一个项目,这篇内容打算记录在开发中遇到的坑

1. Rules验证错误消息的捕捉问题

这篇文章我在Model下对应的php文件中Rules[]添加规则做表单验证,它可以在后台录入时生效,比如常见的标题、Slug等需要唯一的功能需要在这部分做处理。

如果在前端自建的表单或Component组件实现数据存储功能,往往需要独立使用ValidatorValidationException这两个系统对象来捕捉验证反馈信息,而在此处需要注意的是它可以受到Model内置的Rules规则限制,却不能捕捉到该错误信息,因此我们需要单独在前端处理请求的时候独立设置Rules[],而这里的Rules应该是需要覆盖Model中的,而不是互补规则。

说来说去有点绕,直接案例吧,在Model中的规则如下

    public $rules = [
        'title' => 'required|unique:julian_library_books,award_title',
        'slug' => 'required|unique:julian_library_books,slug',
    ];

julian_library_books中的titleslug字段唯一且必填,这套规则在后台录入时是没有毛病的。但是如果前端我们再来一段规则component中的规则

        $validator = Validator::make(
            //Data
            [
                'title' => Input::get('title'),
		        'slug' => Input::get('slug')
            ],
            //Rules
            [
                'title' => 'required|min:5',
                'slug' => 'required|min:5',
            ]
        );

在这个规则里配置了titleslug必填,并且长度不少于5个字符,如果这时候我们通过component来添加重复的titleslug,那么它依旧会被Model中的unique唯一规则限制,但是返回的错误是无法在component中被捕捉的。所以正确的写法是覆盖model的规则

//Rules
            [
                'title' => 'required|min:5|unique:julian_library_books,award_title',
                'slug' => 'required|min:5|unique:julian_library_books,slug',
            ]

2. 404错误页的问题

建立404错误页非常简单,只需要在CMS中添加一个名为404page,但是要注意用于Model数据展现的page slug参数不要放在根目录,否则无法捕捉404错误页。

最近补充,自己开发插件需要单独处理404页面,可参考此文《

3. 自建插件component的问题

如果component中加入模板中的变量会导致重复无法正常调取数据

4.Blog插件分类的slug问题

默认情况在categoryFilter这一项中如果写成了:slug,那么无论如何都无法生效,这时候需要在模板文件中按照下面来修改

categoryFilter = "{{ :slug }}"

5.formWidget开发“the partial _widget.htm not found”的错误

在windows中本地开发时没有发现这个问题,但是上传到服务器(linux)中出现该问题,这是因为formwidgets下面的文件名需要与类名大小写一致,如

class SolutionBox extends FormWidgetBase

而该文件的文件名也必须是SolutionBox,大小写一致。

产生这个错误的原因是由于linux中区分文件名大小写,文件名SolutionBox和类名不一致导致formwidget注册失败而导致系统会默认寻找_field_solutionbox.htm这个partial

6.路有冲突的问题

和第五个问题一样,本地没发现问题,在linux服务器上出现的问题,原因是我在产品列表页使用的路由规则是:/products/:page?,而在产品内容页使用了/products/:slug,这使得前端产品内容页面路由失效,目前我把后者products改成product冲突消失,一切正常。

7.Apache的运行模式问题

如果你使用apache做服务端,如果运行模式是php-fpm/FastCGI,而不是Apache 2.0 Handler,那么程序也无法运行,如何判断这个模式?新建phpinfo();的文件查看Server API即可。

8.多国语言的BUG

安装完Translate插件后在后台使用Scan for messages会报错octobercms rainlab_translate_messages no such column: found,这时候需要到数据表中建立个名为foundboolean字段类型

Post Comment