2024年6款最佳Laravel CMS开源系统
您是否需要最好的Laravel CMS软件来使用它构建史诗般的项目?
选择正确的内容管理系统 (CMS) 对于您的在线形象的成功至关重要。
Laravel以其优雅的语法和强大的功能而闻名,已成为寻求效率、可扩展性和简单性的开发人员的首选框架。
在这个生态系统中出现了几个基于Laravel的CMS平台,每个平台都提供独特的特性和功能,以满足不同的需求。
这本综合指南对当今可用的最佳选择进行了深入的了解。
无论您是经验丰富的开发人员、企业主,还是刚刚进入数字领域,我们的探索涵盖了一系列CMS选择——从多功能的Statamic到Lavalite的多语言能力,再到以电子商务为中心的Bagisto。
加入我们,我们将浏览这些创新平台,重点介绍关键功能、可用性以及每个平台如何将您的Web项目提升到新的高度。


1. Statamic

cc11.jpg

Statamic是简单与力量的完美结合。与传统的CMS不同,Statamic不会让您陷入复杂的数据库困境。
相反,它使用平面文件,使您的网站闪电般快速且超级易于管理。
此外,使用Statamic,您不仅可以获得CMS;你得到了一个创造性的游乐场。其灵活的模板允许您构建任何您能想象到的东西,而不受通常的限制。
但真正让Statamic大放异彩的是其充满活力的社区。无论是新手还是经验丰富的开发人员,您都会发现丰富的资源和友好的人随时准备提供帮助。
将所有这些与Laravel强大、安全的基础相结合,您就获得了赢家。
Statamic是您Web开发之旅中的合作伙伴,确保您的网站独一无二且充满活力。
主要特点:
使用平面文件系统而不是传统数据库。这意味着内容存储在文件中,这可以带来更快的性能和更轻松的版本控制。
它提供了高度灵活的模板选项。开发人员可以创建独特的自定义设计,而不受其他CMS平台中常见的限制。
由于其集成的版本控制,您的内容和配置更改可以轻松跟踪。此功能简化了管理和回滚更改的过程。
支持Markdown进行内容创建,对于许多用户来说,这比HTML更简单、更直观。
提供优雅且用户友好的控制面板,使网站管理简单明了,即使对于非技术用户也是如此。
最适合:
Statamic非常适合优先考虑灵活性、内容管理和性能的开发人员和网站所有者。
它非常适合需要定制、独特设计的项目,以及那些喜欢平面文件方法而不是传统数据库驱动系统的项目。
定价:
您可以立即使用Statamic的免费Solo计划开始工作。或者您可以选择任何高级计划,每个站点每月7美元起。


2. Juzaweb

cc12.jpg

JuzaWeb的超级用户友好的界面使创建和管理网站变得轻而易举。
它的设计考虑到了初学者和专业人士,因此您会发现它非常直观而强大。更重要的是,JuzaWeb提供了出色的自定义选项,让您可以根据自己的确切喜好定制您的网站。
最好的部分是什么?Laravel框架确保了强大的安全性、出色的性能和可扩展性。
无论是启动个人博客还是商业网站,JuzaWeb都是Laravel CMS,可简化您的Web开发之旅并确保您的网站在数字世界中脱颖而出。

主要特点:
以最小的开销提供最大的功能。它提供了合理的默认值和内置工具,以帮助编写可靠和安全的代码。
CMS易于理解和操作,因此即使没有高级编程技能的用户也可以访问它。
借助API和代码生成功能,您可以在更短的时间内编写更多代码。
可以轻松地在同一数据库上同时创建和管理多个网站。
最适合:
JuzaWeb非常适合重视简单性和效率的用户,包括初学者和没有广泛编程知识的用户。
其用户友好的界面、高效的代码管理和多网站支持使其成为希望轻松管理多个项目的小型企业主、博主和Web开发人员的理想选择。
定价:
JuzaWeb是一个免费和开源的Laravel CMS。



3. Lavalite

cc13.jpg

它以令人印象深刻的功能完美地封装了现代Web开发需求。
Lavalite建立在最新的Laravel框架之上,提供响应式布局,非常适合创建强大的应用程序。有什么了不起的?它是一个免费的开源工具,因此您无需花一分钱即可开始构建。
轻量级的UI/UX设计,结合Laravel的强大功能,使运行您的网站变得轻松愉快。
定制是一件轻而易举的事,确保您的网站与您的愿景完美契合。此外,凭借终身更新和24/7全天候支持,Lavalite不断发展以满足您未来的需求。
它的可扩展性、多语言支持和零编码麻烦标志着Lavalite不仅仅是一个CMS,而是适用于各种Web项目的下一代解决方案。

主要特点:
Lavalite建立在先进的Bootstrap框架之上,旨在创建功能强大且响应迅速的Web应用程序
Lavalite是一个免费的开源CMS,无需任何金融投资即可开始。
简单而有效的架构,使其更容易与Laravel的强大功能一起处理。
高度可定制,使其成为复杂或非复杂Web应用程序开发的"耐用"工具。
最适合:
Lavalite适用于在Web项目中寻求简单性、灵活性和功能平衡的开发人员和网站经理。
其用户友好的界面、广泛的自定义选项和强大的框架适合各种规模的企业,尤其是那些需要动态、响应迅速且易于维护的在线形象的企业。
定价:
Lavalite是一个免费和开源的Laravel CMS。


4. Microweber

cc14.jpg

让我们讨论一下为什么Microweber是Laravel CMS世界的瑰宝。
其独特的"拖放"功能使Microweber与众不同,即使对于不精通技术的人来说,网站建设也像馅饼一样简单。(注意:其他一些CMS也带有拖放工具。
但是等等,还有更多:毫不费力地建立一个在线商店,并通过自定义域和令人惊叹的主题反映您的品牌个性。
此外,Microweber强大的管理面板让您牢牢掌握在驾驶座上,提供干净、直观的界面来打造您梦想中的网站。
Microweber是用户友好性、多功能性和强大性能的首选。

主要特点:
拖放构建器大大简化了网站创建过程。
实时编辑功能允许您直接在网站上实时编写和编辑内容。
提供对各种有吸引力的主题的访问,并完全控制网站的外观。与其按原样使用它们,不如根据自己的喜好修改它们!
管理界面简单而功能强大,让您可以完全控制网站的每个区域。
最适合:
Microweber适合寻求直观、用户友好的平台来创建和管理其网站的个人和企业。
拖放式构建器、实时编辑功能和电子商务功能使其成为企业家和中小型企业的完美选择。
定价:
Microweber是一个免费和开源的Laravel CMS。


5. Filament

cc15.jpg

Filament作为Laravel CMS大放异彩,其创新功能专为开发人员设计。
您可以使用其多功能的面板生成器构建从管理面板到面向客户的应用程序的任何内容。
在表单生成器中使用25+ 组件,可以轻松制定令人惊叹的Livewire驱动的表单。表格生成器可让您快速制作交互式数据表。
实时用户通知?检查。交互式模态和幻灯片?当然,保持用户参与从未如此简单。
此外,Infolist Builder提供灵活的只读信息显示,而Widgets(我们的最爱!)可让您创建动态仪表板。
所有这些都建立在TALL堆栈上,结合了Tailwind CSS、Alpine.js、Laravel和Livewire,用于动态、可维护的应用程序。
Filament是创造性、高效Web开发的动力源。

主要特点:
允许使用Laravel构建各种应用程序,从管理面板到面向客户的应用程序。
在定制方面具有极大的灵活性,因此您可以根据需要定制面板。
具有各种组件的表单和表格构建器,用于创建交互式表单并增强数据呈现。
向用户提供有关重要事件的实时消息传递,从而提高用户参与度。
最适合:
Filament适用于寻求高度可定制和以开发人员为中心的平台的开发人员。
得益于其强大的功能,如面板生成器、表单和表格生成器以及一套交互式组件,它非常适合那些需要创建复杂的、数据驱动的Web应用程序或自定义管理面板的用户。
定价:
Filament是一个免费和开源的Laravel CMS。


6. PyroCMS

cc16.jpg

PyroCMS以其独特的易用性和功能性而大放异彩,非常适合所有技能水平的用户。
PyroCMS很酷的地方在于它的模块化结构,允许您根据需要添加或删除功能。因此,您可以保持网站的轻量级和高效。
此外,其直观的管理面板易于导航,在很大程度上使内容管理变得整洁。
PyroCMS还拥有强大的社区支持,确保您始终只需点击几下即可获得帮助或新的扩展。
如果您正在寻找易于使用、高度可定制且建立在强大框架上的CMS,PyroCMS是您的不二之选。

主要特点:
它包括各种字段类型、模块和插件,并辅以强大的API,以实现广泛的Web开发可能性。
文件模块与Laravel的文件系统顺利集成。它解锁了数字资产的轻松管理,具有灵活存储文件和优化图像的功能。
提供页面模块,可直观地管理页面和导航,由内容类型和强大的基于Twig的布局提供支持。
最适合:
PyroCMS是寻求基于Laravel构建的灵活而强大的CMS的开发人员的理想选择。
它擅长强大的文件管理和复杂的内容结构。这使得它特别适合创建复杂的网站,如新闻门户、博客和电子商务平台。
定价:
您可以免费使用PyroCMS,但您也可以选择PyroCMS Pro版本,每月只需25美元。
laravel在caddy中的配置
example.com {
    root ./public
    fastcgi / 127.0.0.1:9000 php
    rewrite {
        to {path} {path}/ /index.php?{query}
    }
}
laravel Call to undefined function Illuminate\Encryption\openssl_cipher_iv_length()

原因是没有开启openssl扩展。

不过,在windows环境下还有一个需要注意的,就是php.ini文件中extension_dir需要修改为绝对路径,

如下:

extension_dir="C:\phpstudy_pro\Extensions\php\php7.4.3nts\ext"
Laravel不能使用mysql_real_escape_string如何过滤非法字符?

mysql_real_escape_string在php8不能用,mysqli_escape_string需要mysqli。

pdo也有一个过滤非法字符函数就是quote(),在laravel中用法如下。

DB::connection()->getPdo()->quote()
caddy和php在不同docker下:部署laravel应用的caddyfile配置

caddy和php容器不同时需要分别设置root路径,参考以下caddyfile文件。

mysite.com {
        // 这是caddy容器下的laravel目录
        root * /srv/mysite.com/public
        encode zstd gzip
        file_server

        try_files {path} /index.php?{query}
        php_fastcgi * php_docker:9000 {
                // 这是php容器下的laravel目录
                root /var/www/html/mysite.com/public
        }
        log {
                output file /data/caddy.log
        }
}
Laravel Octane:直接使用 .rr.yaml 运行 RoadRunner

您可能已经尝试过 Laravel Octane 和 RoadRunner,这是一款用 Go 编写的简洁的小型 PHP 服务器。在 Octane 和 RoadRunner 的基本安装中,您会注意到一个 .rr.yaml 文件被写入项目文件夹,但实际上是空的。同样,如果您尝试使用 ./rr 运行 RoadRunner 二进制文件,那么它将因缺少配置值而失败,相反,您应该通过 php artisan octane:start 命令运行 Octane。

这是有效的,因为 octane:start 命令在托管进程中运行 RoadRunner 二进制文件本身,同时通过带有一些环境变量的命令行参数配置服务器。

如果我们想在没有 start 命令的情况下运行 RoadRunner 二进制文件,我们必须使用相同的命令参数运行它,或者自己填写 .rr.yaml 配置。这些值需要如下:

http:
  address: 127.0.0.1:8000
  pool:
    num_workers: 0
    max_jobs: 500
    supervisor:
      exec_ttl: 30s
  static:
    dir: public
  middleware: ["static"]

server:
  command: "php ./vendor/bin/roadrunner-worker"

  env:
    - APP_ENV: production
    - APP_BASE_PATH: "/path/to/your/laravel/protect"
    - LARAVEL_OCTANE: "1"

rpc:
  listen: tcp://127.0.0.1:6001

logs:
  mode: production
  level: debug
  output: stdout
  encoding: json

虽然配置中有两个部分您可能希望更改。即服务器命令的 envs。要运行该过程,您必须通过此文件对APP_BASE_PATH和APP_ENV进行硬编码,这可能会很痛苦。

另一件需要注意的事情是,默认情况下,Laravel Octane 在项目的 .gitignore 文件中安装了带有 .rr.yaml 配置文件的 RoadRunner,因此您必须在每台机器上进行设置,除非您决定更改它,尽管目前我认为最好添加您使用的每台设备的配置,因为基本路径可能会在每台机器上更改。

修改后的 .rr.yaml 文件到位后,您现在可以运行 ./rr serve 命令并运行服务器,而无需使用 artisan。

为什么要直接运行 RoadRunner?

这可能会成为一个问题,为什么直接使用 road runner 二进制文件可能更好,答案是,对于大多数人来说,事实并非如此。就我自己而言,我打算在未来构建更多的 roadrunner,包括在 docker 容器中运行服务器。因此,我实际上需要 RoadRunner 将其日志记录信息直接输出到 stdout 中,而不是使用 octane:start 命令将此日志记录信息混淆为自己的格式,从而使查看请求状态变得非常简单。

希望这对一些希望更深入地了解 RoadRunner 以及如何在基本设置之外对其进行自定义的人有用。如果您想了解有关 RoadRunner 配置中可用选项的更多信息,可以在文档中阅读相关内容。


laravel: roadrunner: Undefined constant "Laravel\Octane\Commands\Concerns\SIGINT"

在安装laravel octane扩展后,运行roadrunner时,出现Undefined constant "Laravel\Octane\Commands\Concerns\SIGINT"错误。

这是因为代码中没有检查是否安装了pcntl扩展导致的,也就是说roadrunner需要pcntl库。

因此,安装ext-pcntl扩展后运行即可。

laravel:Please Provide a Valid Cache Path

这种情况是原有laravel项目迁移时,文件目录没有完全迁移导致的。

主要是storage目录下的结构与原项目不同。

尝试把原项目的storage目录拷贝的迁移项目中。

laravel中设置了时区但还是UTC时间的问题

首先,在config/app.php里timezone设置为Asia/Shanghai,

其次,model文件中如下设置serializeDate,

use DateTimeInterface;

// 仅设置此方法可行protected function serializeDate(DateTimeInterface $date)
{
    return $date->format('Y-m-d H:i:s');
}


// 仅设置以下属性无效protected $casts = [
    'created_at' => 'datetime:Y-m-d H:i:s',

];
laravel Sanctum 中没有添加auth的路由中,如何获取用户信息

一个接口允许游客访问,同时支持已登录用户相关的一些判断,比如是否点过赞。

此时,该接口不受路由保护,但需要获取用户信息,通常使用的$request→user(),在没有添加auth:sanctum中间件时,此时始终返回null。

以下方法可以在没有添加auth中间件的路由中获取用户信息。

$user = auth('sanctum')->user();//查询用户信息
laravel - 在docker中composer install时,ext-zip扩展问题,docker安装libzip
RUN apt-get install -y zip libzip-dev && docker-php-ext-install zip

首先,安装libzip库,然后就是docker-php-ext-install来安装zip扩展即可。

easyadmin中js的自定义模板方法

写法如下,需要注意的是e参数是一条数据对象,不是字段值。下面代码中e不是attachement的值。

field: 'attachement', title: 'attachement', templet: function (e) {
                            switch (e.attachement.content_type) {
                                case 'text':
                                    return e.attachement.content;
                                    break;
                                case 'image':
                                    return "<img src=\"" + e.attachement.content + "\" style=\"width:100px;height:100px;\">";
                                    break;
                                case 'video':

                                    break;
                            }
                        }
laravel中修改reuqest数组的方法

以下两种方式都可以。

1. request→merge()

$request->merge(['user_id' => 1]);

2. request→offsetSet()

$request->offsetSet('user_id', 1);
laravel使用seeder批量生成数据

使用seeder可以批量生成数据

public function run()
	{
		$faker = Faker::create();
		
		$limit = 10;
		for ($i = 0; $i < $limit; $i++) {
			DB::table('posts')->insert([
				'title' => substr($faker->sentence($faker->numberBetween(1,5),true), 0, -1), //Remove . from the end
				'category' => $faker->randomElement(['travel', 'life style', 'in focus', 'globe']),
				'tags' => implode(',', $faker->randomElements(['Meklowski', 'Incident', 'East', 'Charles Jo.', 'Space', 'Universe', 'DIY', 'Tuts'], $faker->numberBetween(1,8)) ),
				'content' => $faker->text(6000)
			]);
		}
	}
TypeError: Illuminate\Routing\Router::group(): Argument #1 ($attributes) must be of type array, Closure given, called in D:\project\ibra-backend\vendor\laravel\framework\src\Illuminate\Support\Facades\Facade.php on line 353 in file D:\project\ibra-backend\vendor\laravel\framework\src\Illuminate\Routing\Router.php on line 450
Route::group(function () {
        Route::get('/list', [\App\Http\Controllers\Controller::class, 'list']);
    });

group下只有一个路由会有如上报错。

laravel中使用自定义助手函数
  1. 创建函数库:app/Helpers/ArrayHelper.php
<?php

if (!function_exists('flatten')) {
    function flatten(array &$list): array
    {
        $flat = [];

        while ($e = array_pop($list)) {
            if (is_array($e)) {
                array_push($list, array_values($e));
            } else {
                $flat[] = $e;
            }
        }

        return $flat;
    }
}

 

2. 设置自动加载

"autoload": {

  "psr-4": {

      "App\\": "app/",

      "Database\\Factories\\": "database/factories/",

      "Database\\Seeders\\": "database/seeders/"

  },

     "files": [


      "app/helpers.php"

  ]

},

 

3. 运行自动加载命令

composer dump-autoload
laravel使用自定义facade门面类

在Laravel中,门面类(Facade)是一种提供简单接口以访问底层实现的功能的类。Laravel自带了许多门面类,例如File、Log等。如果你想自定义一个门面类,可以按照以下步骤进行:

创建门面类文件:
在Laravel项目的app目录下创建一个新的文件,例如MyFacade.php。

命名空间:
在MyFacade.php文件中,使用适当的命名空间。例如:

php复制代码<?php    namespace App\Facades;    use Illuminate\Support\Facades\Facade;

创建门面类:
在MyFacade.php文件中,继承Facade类并实现getFacadeAccessor方法。该方法用于指定底层实现的类名。例如:

php复制代码<?php    namespace App\Facades;    use Illuminate\Support\Facades\Facade;    class MyFacade extends Facade  {      protected static function getFacadeAccessor()      {          return 'my-service';      }  }

在上面的示例中,我们将底层实现的类名设置为 'my-service'。
4. 注册门面类:
在Laravel项目中,门面类的注册通常在bootstrap目录下的app.php文件中完成。找到以下代码:

php复制代码// Laravel Facades...  require_once __DIR__.'/../app/Http/Facades/Route.php';  require_once __DIR__.'/../app/Http/Facades/Request.php';  require_once __DIR__.'/../app/Http/Facades/Response.php';  require_once __DIR__.'/../app/Http/Facades/View.php';

在文件末尾添加以下代码以注册自定义门面类:

php复制代码// Custom Facade...  require_once __DIR__.'/../app/Facades/MyFacade.php';

使用自定义门面类:
现在你可以在Laravel项目中使用自定义门面类了。例如,在控制器或任何其他类中,使用以下代码:

php复制代码use App\Facades\MyFacade;

然后,你可以像使用内置的门面类一样使用自定义门面类。例如,调用底层实现的方法:

php复制代码$result = MyFacade::someMethod($param1, $param2);
laravel如何判断模型中是否有指定字段

比如,需要判断模型中是否有user_id字段,用以下方法即可。

 

Schema::hasColumn($this->model->getTable(), 'user_id')
修改Laravel模型返回时间格式,去掉时区部分

如下所示,在model文件中的$casts属性定义时间格式即可。

protected $casts = [
'created_at' => 'datetime:Y-m-d H:i:s',
'updated_at' => 'datetime:Y-m-d H:i:s'
];
laravel中设置时区timezone

修改config/App.php文件中的timezone

'timezone' => 'Asia/Shanghai',

 

  • 当前日期:
  • 北京时间:
  • 时间戳:
  • 今年的第:17周
  • 我的 IP:3.133.144.147
农历
五行
冲煞
彭祖
方位
吉神
凶神
极简任务管理 help
+ 0 0 0
Task Idea Collect