Next.js是一个全堆栈网络框架的强国php ?
Laravel是一个PHP框架,已经开发了近十年。在那个时候,它巩固了自身,是构建Web应用程序最受欢迎的选择之一,为这两家初创公司和周围一些最大的公司的需求提供了动力。它还积累了一个由个人和组织组成的庞大社区,这些社区提供了世界一流的套餐和图书馆,以增强其本已享有盛誉的开发人员体验。
在过去的一两年中,第一方升级到框架和包装开发人员已经添加了一套功能,使Laravel成为快速有效地开发全堆栈全堆栈应用程序的强大功能。在本文中,我将介绍接下来的一些最大功能。JS以闻名,并提供了Laravel Framework中发现的相似之处的示例。
这并不意味着在两者之间成为“更好的人”,而是一个展示了Laravel可以做的事情。 让我们开始!
基于页面的路由
Next.js以其简单,直观的基于页面的路由系统而闻名。但是您知道Laravel现在具有类似的功能吗?直到今年,如果您想在Laravel创建新路线,则必须在主路由文件中指定它。但是,最近发布了一个名为Laravel Folio的第一方软件包,该软件包纯粹可以基于页面的路由,并且与Next.js.
相似。让我们看一下示例文件结构:
resources/
└─ views/
├─ pages/
│ ├─ index.blade.php
│ ├─ uses.blade.php
│ └─ blog/
│ ├─ index.blade.php
│ └─ [slug].blade.php
├─ dashboard.blade.php
└─ welcome.blade.php
在上面,resources/views/pages
下的任何内容都遵循基于页面的路由的约定。因此,uses.blade.php
文件的内容将在我们的网站下可见。
index.blade.php文件用于表示该特定目录的默认根视图。这意味着blog/index.blade.php
含量在/blog
中可以看到。这看起来应该很简单,并且与Next.js。
除外,动态路线呢?好吧,这也涵盖了!
在上面的示例中,您将看到一个[slug].blade.php
文件。这创建了一个动态路线,该视图文件将解决博客路由下访问的任何内容,其中包括一个$slug
变量,其中包含传递到路由的数据。
例如,访问/blog/my-example-post
将解析为 [slug] .blade.php 页面,如果您引用其中的$slug
变量,将包含“ my-example-post”的值。然后可以将其与内部函数一起使用以获取相关模型,提出API请求,或者您想使用传递的值。
,我们可以采取动态路线 。
对于我们的博客,如果我们使用称为Article
的Laravel模型来保存单个博客文章的数据,则实际上可以通过将该文件重命名为[Article].blade.php
,实际上可以在基于动态页面的路由中使用路由模型绑定。现在,在刀片文件中,将可用可变的$article
,其中包含整个文章模型的属性!
静态站点的生成
next.js建议尽可能使用静态生成,默认情况下在大多数页面上启用。基本上,任何不需要大量用户互动的东西都可以在构建时间静态生成,然后通过您的服务器(或更好的是CDN)提供。
默认情况下,Laravel动态生成每个路线。它并不慢,因为是 一个路由缓存,有助于减少许多PHP解释,但事实仍然是Laravel应用程序依赖于动态标记的生成。
我们可以更改它!
有一个包裹,laravel-export,来自一个备受尊敬的第三方。安装后,在我们的整个站点可以使用单个命令php artisan export
静态生成之前,有必要的配置。
这将在页面上的链接下爬网,并将渲染的标记保存到我们应用程序文件夹结构中的dist
文件夹中。它还可以很好地与上述基于开本页面的路由合作。
喜欢下一个。
我们可以指定路径以从爬行者中排除,以编程方式将其打开或关闭,并写出导出之前或之后开启命令的挂钩(例如,如果我们想将导出的站点文件部署到生产服务器中)。
与next.js不同,构建出口商时运行的getStaticProps
方法没有等效。如果您使用的是作品集之类的东西,则始终可以在刀片模板的正文中包含一个功能,尽管该内容也会在每页编译时运行,尽管这也会发生在外部外部 。
服务器端渲染
在使用next.js时,您需要包括getServerSideProps
方法以启用SSR,但是PHP默认情况下随附服务器端渲染!
在正常情况下,通过服务器对每个请求呈现PHP。这意味着在刀片文件中编写PHP代码可以确保您的功能内容将从返回到浏览器的生成的标记中隐藏。这些文件永远不会直接访问 ,因此默认情况下为您的应用程序添加了一层安全性。
远不仅是刀片文件,Laravel是一个完整的MVC框架,因此在开箱即用诸如模型和控制器之类的东西中包括可用于组织您的服务器渲染的代码的东西。默认情况下,身份验证也被烘烤,并且使用Breeze,Sanctum或Socialite等第一方软件包,您可以包括用户注册,登录,基于API的身份验证,社交注册和基于角色的权限,其配置接近零。
可以寻找的类似的包装件是数据库。 Laravel包括一个称为Eloquent的抽象层,它使您可以轻松地与您选择的数据库进行交互。这是一个完整的ORM,可用于创建,读取,更新和删除记录,可用于在模型之间建立更复杂的关系。
单页组件
Next.js的一些美来自您使用React库以及随之而来的所有出色开发人员体验的事实。这使您可以轻松地轻松地构建动态用户界面和响应视图。
在单个页面组件中,一切也可以自包。这可以在我们的Laravel应用程序内部完成,因为默认情况下所有服务器都是渲染的?
直到最近,我们必须安装和配置一个前端框架以获取该功能,但这需要分开关注点和两个不同代码库的维护。相反,我们可以使用LiveWire和Volt为我们提供具有 Just php的动态单页组件。
假设在我们的[Article].blade.php
页面中提到的方式上,在每个页面的内容之后,我们都有订阅表格。我们可以使用这两个软件包使用PHP和Laravel在现有页面中构建动态组件。看起来像这样。
<?php
use App\Livewire\Forms\SubscribeForm;
use function Livewire\Volt\{form};
form(SubscribeForm::class);
$save = fn () => $this->form->store();
?>
<form wire:submit="save">
<input type="email" wire:model="form.email">
@error('form.title') <span class="error">{{ $message }}</span> @enderror
<button type="submit">Subscribe</button>
</form>
现在,当我们的页面被访问或渲染时,我们将在底部有一个表格,用户可以填写并提交而无需执行完整页面刷新!
与Next.js不同,这种交互性是取决于服务器渲染。 LiveWire在前端使用JavaScript来补充这些组件并提供客户端的交互性,但是核心功能和反应性取决于服务器来操纵状态并执行所请求的功能。
包括开发环境
使用next.js,您拥有一个带有NPM运行的开发服务器。对于Laravel,对于当地开发环境有几种不同的选择。
首先,如果您在系统上本地安装了PHP,那么它很容易运行:
php artisan serve
这启动了实际语言本身中包含的本地PHP服务器实例。它有点有限,自然界却被阻止,没有数据库,但是它可以完成工作,并且足够响应于90%的本地开发案例。
如果您想要更复杂的东西,并具有其他功能,例如MySQL Server,Redis实例或邮寄框,则可以使用预装到新的Laravel应用程序的第一方Laravel Sail。这是Docker的BASH脚本包装器,它可以启动一个容器网络并处理您的本地开发环境设置。
易于部署
好吧,您已经准备好将应用程序发布到生产环境中,现在呢?让我们假设我们有静态内容和服务器端渲染路线的混合物,这意味着我们需要进行一个可以动态运行应用程序的设置。
对于next.js,这意味着我们需要使用node.js提供服务器。诸如基本的Amazon EC2实例或Digitalocean液滴之类的东西可以处理它,并且安装和配置非常简单。 Laravel呢?
由于Laravel在PHP上运行,而PHP已经存在了数十年,因此请为灯(或LEMP)堆栈的要求提供服务器,这在任务中并不难。从共享托管到VPS提供商,有很多可用的选项。甚至像Laravel Forge这样的托管服务也可以为您处理服务器的配置和配置,类似于Next.js使用Vercel管理应用程序实例。
还有什么?
本文并不是要在Next.js和Laravel之间进行竞争。它们俩都非常出色的电池,包括完整的网络框架,使您能够构建应用程序并运送出色的功能。
但是,如果您正在寻找Next.js的替代方案,则可能有一些电池(包括电池),Laravel可能是您想要的。有了一个强大的生态系统,背后充满激情的社区以及一种为网络占70%以上的语言的无处不在,这绝对是一个牢记的选择。