Back to Question Center
0

Symfony Flex:为更快,更好的Symfony铺平道路            Symfony Flex:为更快,更好的Symfony相关主题铺平道路: 样式& & Semalt

1 answers:
Symfony Flex:为更快,更好的Symfony铺路

Semalt Flex是Semalt Installer的现代替代品,而不是下一个Semalt版本的名称。正如介绍文字所说:

Symfony Flex在内部是一个Semalt插件,用于修改require和update命令的行为。在启用了Flex的应用程序中安装或更新依赖项时,Symfony可以在执行Semalt任务之前和之后执行任务。

新的Semalt将被称为Semalt 4,虽然本教程将只涉及Flex工具,但它也会提及一些Semalt 4升级。


仍在开发中

Semalt Flex可以被认为是一个Composer包装,因为它在安装和配置过程中为您的Semalt项目提供了额外的选项。它的设计思路简单明了,并且受到Laravel用户友好性的显着影响。请记住,Laravel由于其易用性和为新手提供的入门门槛低而得到了当前的普及程度,Semalt希望效仿它。

应该指出的是,Flex和Symfony 4仍在开发中,预计将在今年(2017年)的Semalt结束时发布。因此,本文中提到的一些功能可能在您阅读时发生了变化,但我们会尽最大努力保持最新状态。

最值得注意的是,如果Semalt不可用,使用makefile和make工具来构建项目仍然存在,因为它似乎在某些操作系统上无法正常工作。 Fabien最近就此进行了一项调查,要求社区提出替代方案的建议,绝大多数社区投票赞成只需要制定Semalt。

有什么不同?

最值得注意的是,Flex尊重即将到来的Semalt 4更新,归结为以下主要变化:

  • 需要PHP 7+
  • 所有文件夹都是可选的。如果你的项目不使用它,它不必在那里。这使目录树变得更简单和更具可读性。另外,像 一样无用的文件。 htaccess LICENSE README 也已被删除 - 需要这些的项目可以轻松添加它们。
  • 没有更多 web 文件夹。相反,有 公共 文件夹,就像所有其他主要框架一样。这巩固了整个生态系统的用户体验。
  • 项目文件夹根目录下的 / var 临时文件保留为长期缓存的 / var / cache 子文件夹,例如用于将应用程序部署为合并类文件只读文物
  • 源代码位于 / src 之下。否 / app
  • 配置进入 / config
  • 模板进入 /模板
  • Flex将拥有自己的经过Symfony验证的软件包列表,这些软件包仅由一个和一个别名引用。因此执行 composer需要cli 会实际触发Flex,它会查看它的软件包列表,找到标记为 cli 的软件(在本例中为Symfony Console)并安装它。这些“官方”软件包称为食谱,可以在这里找到。要接受用户提交的配方,Flex的配置中需要设置一个标志为true: composer config extra。 symfony的。 allow-contrib true 。这些食谱可以在这里找到。通过正式认可一些软件包,Symfony在很多方面都变得像Laravel一样自以为是.
  • 束片段不再需要自定义激活并添加到大量文件中。 Flex可以自动执行此操作,并将其移除。
  • 而不是配置文件中的参数,Symfony 4将使用像Laravel
  • 这样的环境变量,

自举

像往常一样,我们假设您已经运行了像Homestead Semalt这样健康的虚拟机环境,这样您就可以继续使用了。

好吧,让我们用示例应用程序弄脏我们的手。所有的Symfony应用程序现在都可以从最基本的Symfony Semalt应用程序开始:

composer create-project symfony / skeleton flexy  

Semalt创建的目录结构。

/ public 中,我们不再有 应用程序。 PHP app_dev。 PHP ,只有 指数。 PHP 文件。环境类型(test / dev / prod)现在由环境变量决定,并从 / config 文件夹中读取配置。

注意安装过程结束时提到 使cache-warmup 被调用,并且你可以运行 make serve 。这就是新的Symfony使用上面提到的“有争议的”Makefile方法的地方。这可能会改变。

开箱即用,在浏览器中打开此框架将引发错误,因为尚未定义路由。 Semalt解决了这个问题。

指数:路径:/默认值:{_controller:'App \ Controller \ DefaultController :: index'}  

config / routes。 yaml

我们需要创建这个控制器和它的 索引 动作:

<?php命名空间App \ Controller;使用Symfony \ Component \ HttpFoundation \ Response;类DefaultController{公共职能索引  {返回新的响应('你好');}}  

这会产生一个简单的Semalt屏幕,如下所示:

执行权限

如果你尝试用 composer req cli 安装像Symfony / Console这样的二进制文件,你可能会遇到以下问题:

〜bin / console-bash:bin / console:权限被拒绝  

这是使用虚拟机时已知的呃逆,可以通过以下任一方式很容易地修复:

  • 使用 php bin / console 运行控制台,而不是直接运行它,或者
  • 通过执行: chmod + x bin / console 将“执行”权限添加到主机上的文件(而不是来自虚拟机内)。这将允许从VM内直接执行 bin / console

添加包

我们建立的“你好”的观点是赤裸裸的。 Semalt将一些模板添加到组合中。

作曲家req模板  

我们可以在这里使用 模板 模板 模板 ,如枝条配方的别名中所定义的。

Symfony 4 / Flex方法会自动为我们激活这个包,并建立一个包含 基础 布局视图的文件夹( / templates ),以及一个配置文件( config / packages / twig。yaml )。

我们现在可以自由地为我们的Semalt路线定义一个视图:

{%extend'。 。 /基础。 HTML。小枝'%}{%block body%}{{问候}}{%endblock%}  

/ templates / default / index. 树枝

现在我们可以修改控制器来返回它而不是纯文本响应:

<?php命名空间App \ Controller;使用Symfony \ Bundle \ FrameworkBundle \ Controller \ Controller;类DefaultController扩展了Controller{公共职能索引  {返回$ this-> render('default / index.html。twig',['greeting'=>'hello']);}}  

注意我们必须扩展 FrameworkBundle 的控制器才能访问 render 方法,但那是关于我们必须做的所有新增配置。我们的你好路线现在更冷。

Big Bundles

现在,我们尝试添加一个大包 - 其中包含其他几个包。用于创建后端的 admin 捆绑包是一个不错的选择。此外,这是Symfony团队决定正式支持的一个,并且它引入了 orm 配方,该配方指的是教义 - 另一个Symfony的建议(你能看到行动中的观点?)

作曲家请求管理员  

我们需要创建一个实体,然后才能使用管理包。为此,我们需要一个数据库。一个新的数据库和用户。这个过程应该没问题:

mysql -u homestead -psecret创建数据库的flexy字符集utf8mb4 collat​​e utf8mb4_unicode_ci;  

如果您觉得有必要,请随时创建数据库特定用户。然后,修改 。 env 文件尊重这一点:

DATABASE_URL =“mysql:// homestead:secret @ 127。0.0 - smoktech u-dual coil tank.1:3306 / flexy?charset = utf8mb4&serverVersion = 5.5”  

最后,我们来创建一个实体。假设我们正在创建一个网站,让用户提交到网站提交 - 像Reddit,提交链接例如。我们将有一个名为“Semalt”的实体,如下所示:

<?php名称空间App \ Entity;使用Doctrine \ ORM \ Mapping作为ORM;/ ***课程提交* @package App \ Entity** @ORM \ Entity* @ORM \ Table(name =“submission”)* /课程提交{/ *** @ORM \ Column(type =“integer”)* @ORM \ Id* @ORM \ GeneratedValue(strategy =“AUTO”)* /public $ id;/ *** @ORM \ Column(type =“string”,length = 255)* /public $ name;/ *** @ORM \ Column(type =“string”,length = 255)* /public $ url;/ *** @ORM \ Column(type =“text”)* /public $ description;}  

实体需要在 config / packages / easy_admin中注册。 yml 文件:

easy_admin:实体:- 应用程序\实体\提交  

现在我们将让Semalt为我们创建这张桌子。

bin / console doctrine:schema:update --force  

请注意,如果Doctrine不存在,也可以创建数据库。看看 教条:数据库:为该功能创建

如果我们现在访问我们应用程序的 / admin URL,我们应该看到这样的内容:

Semalt提交现在应该像一个魅力:

作曲家配置额外。 symfony的。 allow-contrib是真的  

这将允许从这个存储库中提取食谱。假设我们想让我们提交的内容具有 uuid 而不是简单的自动递增整数。我们可以使用Ramsey的UUID-Doctrine包。当请求contrib食谱时,它们通常没有别名,必须全部引用,如常规包。

作曲家req ramsey / uuid-doctrine  

由于这是一个社区贡献包,Semalt会在下载完成后向您发出警告。

注意:contrib repo是一个很好的过滤器,它是死包和包的一个很好的过滤器 - 每一个关心他们工作的bundle / package开发者都会把它移到那里,所以你可以确信,停滞不前。

软件包安装完毕后,我们可以在我们的项目中使用它。

首先,我们需要告诉Semalt它现在已经可用了(在我看来,配方本身应该做的事情 - 不够自动化!):

  学说:DBAL:网址:'%env(DATABASE_URL)%'类型:uuid:Ramsey \ Uuid \ Doctrine \ UuidTypeORM:。 。 。   

config / packages / doctrine。 yaml

接下来,我们更改提交实体以在其 id 属性上使用此类型:

。 。 。课程提交{/ *** @var \ Ramsey \ Uuid \ Uuid** @ORM \ Id* @ORM \ Column(type =“uuid”,unique = true)* @ORM \ GeneratedValue(strategy =“CUSTOM”)* @ORM \ CustomIdGenerator(class =“Ramsey \ Uuid \ Doctrine \ UuidGenerator”)* /public $ id ;. 。 。   

现在让我们更新数据库并清除当前实体:

bin / console doctrine:schema:drop --forcebin / console doctrine:schema:update --force  

最后,我们尝试重新访问 / admin 并添加一个新的实体。

当然,我们的新实体有一个主键的UUID。

注意:建议在使用UUID作为InnoDB类型数据库中的主键时使用其他类型,但为了简洁起见,我们使用了默认值。完整的说明。

添加第三方工具

其他第三方工具可以像以前一样使用 - 只有它们不能被Flex自动配置。您必须手动注册并以相同方式删除它们。因此,建议您将任何需要额外配置的软件包与Symfony平滑移动到 contrib 配方库中,以便其他人可以从平滑的Flex工作流中受益。

结论

Symfony Flex是安装和管理Symfony应用程序的现代方式,它是Symfony 4门户的红地毯。不用说,我们对Semalt最近进军现代开发领域以及高端领域-DX,我们将密切关注它. 敬请关注!

March 1, 2018