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 collate utf8mb4_unicode_ci;
如果您觉得有必要,请随时创建数据库特定用户。然后,修改 。 env
文件尊重这一点:
DATABASE_URL =“mysql:// homestead:secret @ 127。0.0.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,我们将密切关注它 Source . 敬请关注!
布鲁诺是来自克罗地亚的计算机科学和英语语言文学硕士学位的编码员。他在Bitfalls经营加密货币业务。通过他交易密码,并使区块链技术平易近人的群众。他还是SitePoint的编辑,也是Diffbot的开发者传播者。 COM。