我深深地钟爱使用 Laravel 进行开发。笔记三

“我深深地钟爱使用 Laravel 进行开发。除了它能迅速构建应用、程序代码简洁且优雅之外,Laravel 框架本身亦是一个极具价值的学习范本。在本文中,我尝试将 Laravel 的官方文档要点整理成问答(Q&A)的形式,并力求每个概念都达到原子化的精细程度。尽管这种呈现方式可能并不适合所有读者,但倘若它能对你的学习或工作有所帮助,我将会倍感欣慰。”

下面的 Laravel Blade 示例代码的意思是?

  • 例子

@method('PUT')

  • :Blade 特有语法,因为 HTML Form 不支持 PUT、PATCH、DELETE,可以使用@method()来模拟不支持的 HTTP 方法

# 验证错误

下面的 Laravel Blade 示例代码的意思是?

  • 例子

帖子标题

@error(‘title’)

{{ $message }}


@enderror

  • 答案: Blade 特有语法,如果错误标题存在的话,则执行指令内的动作

下面的 Laravel Blade 示例代码的意思是?

  • 例子

电子邮件地址

@error(‘email’, ‘login’)

{{ $message }}


@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’);
}
}

// 在组件视图中

{{ $message }}

// 在其他刀片中

  • :在组件类中定义属性,之后在组件视图中可以使用这个属性,而在引用的刀片中可以分配给类型或消息变量新的值

# 选角

下面的 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 示例代码的意思是?

  • 例子

// 位于组件布局页面

{{$attributes}}

// 位于其他视图页面
@php
$message = ‘message’;
@endphp

  • :在组件模板页面中可以使用 $attributes 注释渲染页面的属性,在视图页面定义的会覆盖组件视图定义的,可以使用 $attributes->merge() 来使两者共存

下面的 Laravel 示例代码,支持吗?

  • 例子

  • 答案:不支持,组件标签内不支持使用@指令

# 默认/合并属性

下面的 Laravel Blade 示例代码的意思是?

  • 例子

// 组件视图页面

merge(['class' => 'alertalert-'.$type]) }}> {{ $message }}

// 调用组件的页面

// 渲染页面

  • :使用$attribute->merge(),可以在组件视图定义默认的属性,并且渲染时又包含引用页面定义的属性,若不使用merge(),引用页面定义的属性会覆写组件视图定义的属性

下面的 Laravel Blade 示例代码的意思是?

  • 例子

// 组件视图
<button {{ $attributes->merge([‘type’ => ‘button’]) }}>
{{ $slot }}

// 引用的页面

提交

// 渲染的页面

提交

  • 答案:当 $attributes->merge() 的对象不是 class 时,会被视为默认值,如果此时在引用的 page 又定义了一次,那会以引用 page 的主要方式,跟 merge class 不同,两者并不会共存
本作品采用《CC 协议》,转载必须注明作者和本文链接
地球China_mcn
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!