我深深地钟爱使用 Laravel 进行开发。笔记三
“我深深地钟爱使用 Laravel 进行开发。除了它能迅速构建应用、程序代码简洁且优雅之外,Laravel 框架本身亦是一个极具价值的学习范本。在本文中,我尝试将 Laravel 的官方文档要点整理成问答(Q&A)的形式,并力求每个概念都达到原子化的精细程度。尽管这种呈现方式可能并不适合所有读者,但倘若它能对你的学习或工作有所帮助,我将会倍感欣慰。”
下面的 Laravel Blade 示例代码的意思是?
- 例子:
@method('PUT')
…
- 答:Blade 特有语法,因为 HTML Form 不支持 PUT、PATCH、DELETE,可以使用@method()来模拟不支持的 HTTP 方法
# 验证错误
下面的 Laravel Blade 示例代码的意思是?
- 例子:
帖子标题
@error(‘title’)
@enderror
- 答案: Blade 特有语法,如果错误标题存在的话,则执行指令内的动作
下面的 Laravel Blade 示例代码的意思是?
- 例子:
电子邮件地址
@error(‘email’, ‘login’)
@enderror
- 答:Blade 特有语法,@error()可以指定第二个 args,为自定义的消息包名称 想像一下如果该页面有多个表单,要提交到不同的 API,若有错误的话肯定会有多个不同的消息包对象,所以必须给消息包自定义名称
# PHP
下面的 Laravel Blade 示例代码的意思是?
- 例子:
@php
$counter = 1;
@endphp
# 成分
以下 Laravel 示例命令的意思是?
- 例子:
php artisan make:组件警报
- 答:建立一个名为Alert的组件
Laravel 中,当我使用 CLI 创建一个组件时,其视图及组件位置为?
查看:resources/views/components
资料夹下 组件:App\View\Components
资料夹下
以下 Laravel 示例命令的意思是?
- 例子:
php artisan make:组件表单/输入
- 答案:Laravel 预设将组件放置
resources/views/components
数据夹下,也可以指定子数据夹,所以会放置:view:resources/views/components/forms
数据夹下 component:App\View\Components\Forms
数据夹下
# 手动注册包组件
下面的 Laravel 示例代码的意思是?
- 例子:
<?php
使用 Illuminate\Support\Facades\Blade;
公共函数 boot()
{
Blade::component(‘package-alert’, AlertComponent::class);
}
// 然后在 Blade 视图页面可以使用
- 答:自己建立一个包,并且在头里有使用到 Blade 组件的话,如果需要在包的服务器提供者的 boot 方法中未注册该组件
下面的 Laravel 示例代码的意思是?
- 例子:
<?php
使用 Illuminate\Support\Facades\Blade;
public function boot()
{
Blade::componentNamespace(‘Nightshade\Views\Components’, ‘nightshade’);
}
// 然后在 Blade 页面可以使用
<x-nightshade::calendar />
<x-nightshade::color-picker />
- 答:自己建立一个包,并且在头里有使用到 Blade 组件的话,如果需要在包的服务器提供商的引导方法中,注册组件,上面的例子假设在
Nightshade
这个包的Package\Views\Components
位置有calendar
以及color-picker
组件
# 渲染组件
下面的 Laravel Blade 示例代码的意思是?
- 例子:
<x-用户配置文件/>
- 答案:使用 x-alert 以及 x-user-profile 组件
下面的 Laravel Blade 示例代码的意思是?
- 例子:
<x-inputs.button/>
- 答案:当组件为嵌套时,使用
'dot'
符号上面示例使用App\View\Components\Inputs\Button.php
组件
# 将数据传递给组件
下面的 Laravel Blade 示例代码的意思是?
- 例子:
- 答:带入参数到警报组件 当带入硬编码字符串时,直接使用 HTML 属性即可 当带入变量时,前线需加上
:
下面的 Laravel 示例代码的意思是?
- 例子:
<?php
命名空间 App\View\Components;
使用 Illuminate\View\Component;
类警报扩展组件
{
公共$类型;
公共$消息;
公共函数 __construct($type, $message)
{
$this->type = $type;
$这个->消息= $消息;
}
公共函数 render()
{
return view(‘components.alert’);
}
}
// 在组件视图中
// 在其他刀片中
- 答:在组件类中定义属性,之后在组件视图中可以使用这个属性,而在引用的刀片中可以分配给类型或消息变量新的值
# 选角
下面的 Laravel 示例代码的意思是?
- 例子:
<?php
// 在组件模型中
public function __construct($alertType)
{
$this->alertType = $alertType;
}
// 在其他刀片页面
- 答案:在组件模型中可定义属性,需要使用camelCast,而在引用处可带入该属性,需要使用kebab-case
# 组件方法
下面的 Laravel 示例代码的意思是?
- 例子:
<?php
// 在组件模型中
public function isSelected($option)
{
return $option === $this->selected;
}
// 在组件模板中
{{ $label }}
- 答案:可以在组件模板中使用定义于组件模型的方法
# 访问组件类中的属性和槽
以下的 Laravel Blade 组件示例代码的意思是?
- 例子:
<?php
public function render()
{
return function (array $data) {
// $data[‘componentName’]; }
// $data[‘属性’];
// $data[‘slot’];
return ‘
‘;
};
}
- 答:可以从 render 方法中获取 componentName、attributes、slot 的值返回值为字符串,会覆盖组件视图,应用待研究
# 额外的依赖项
以下的 Laravel Blade 组件示例代码的意思是?
- 例子:
<?php
use App\Services\AlertCreator
public function __construct(AlertCreator $creator, $type, $message)
{
$this->creator = $creator;
$this->类型=$类型;
$这个->消息= $消息;
}
- 答案:使用方法注入注入AlertCreator实例
# 组件属性
下面的 Laravel 示例代码的意思是?
- 例子:
// 位于组件布局页面
// 位于其他视图页面
@php
$message = ‘message’;
@endphp
- 答:在组件模板页面中可以使用 $attributes 注释渲染页面的属性,在视图页面定义的会覆盖组件视图定义的,可以使用 $attributes->merge() 来使两者共存
下面的 Laravel 示例代码,支持吗?
- 例子:
- 答案:不支持,组件标签内不支持使用@指令
# 默认/合并属性
下面的 Laravel Blade 示例代码的意思是?
- 例子:
// 组件视图页面
// 调用组件的页面
// 渲染页面
- 答:使用$attribute->merge(),可以在组件视图定义默认的属性,并且渲染时又包含引用页面定义的属性,若不使用merge(),引用页面定义的属性会覆写组件视图定义的属性
下面的 Laravel Blade 示例代码的意思是?
- 例子:
// 组件视图
<button {{ $attributes->merge([‘type’ => ‘button’]) }}>
{{ $slot }}
// 引用的页面
提交
// 渲染的页面
提交
- 答案:当 $attributes->merge() 的对象不是 class 时,会被视为默认值,如果此时在引用的 page 又定义了一次,那会以引用 page 的主要方式,跟 merge class 不同,两者并不会共存
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: