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

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

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

  • 例子
merge(['data-controller' => $attributes->prepends('profile-controller')]) }}> {{ $slot }}
  • :当$attributes->merge()的对象不是类时,会被视为默认值,如果在引用的页面又定义了一次,那会以引用页面的主控,跟合并类不同,两者并不能共存但可以使用$attributes->prepends()使两者共存,上面的示例中,'data-controller'的默认值为'profile-controller',然后任何在引用页面定义的值都会被合并到这个数组中

# 过滤属性

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

  • 例子

{{ $attributes->filter(fn ($value, $key) => $key == ‘foo’) }}

  • 答案:在 Blade 组件视图中使用 $attributes->filter(),唯有闭包 return true 的属性才会被保留

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

  • 例子

{{ $attributes->whereStartsWith(‘wire:model’) }}

  • 答案:获取$attributes中,key为'wire:model'起始的属性

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

  • 例子

{{ $attributes->whereStartsWith(‘wire:model’)->first() }}

  • :取得whereStartsWith()筛选后的第一笔属性

# 插槽

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

  • 例子

// 组件视图页面

{{ $title }}

{{ $slot }}

// 引用页面


服务器错误

糟糕! 出了点问题!
</x-警报>

  • :在组件视图页面中可以定义 $slot 位置,当引用该组件时,在该组件标签内的内容都会渲染到组件视图页面中 $slot 的位置,如果想要在组件视图页面中定义多个 $slot 位置那么,如上例可以直接定义变量,在引用的页面中使用<x-slot name="yourSlot"

# 作用域插槽

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

  • 例子

{{ $component->formatAlert('服务器错误') }}

糟糕! 出了问题!
</x-警报>

  • 答案:可以在 Blade 组件类中定义方法,在 slot 中使用 $component 调用定义好的方法

# 内联组件视图

以下位于 Component 类的 Laravel 示例代码的意思是?

  • 例子

<?php
public function render()
{
return <<<’blade’


{{ $slot }}


blade;
}

  • 答案:当组件的范围比较小,可能不需要同时使用组件类以及组件视图页面,此时可以直接在组件类的 render() 返回标记

# 生成内联视图组件

以下 Laravel 示例命令的意思是?

  • 例子

php artisan make:组件警报–内联

  • 回答:当组件的范围比较小,可能不需要同时使用组件类以及组件视图页面,此时可以直接在组件类的render()返回标记上面的命令可以直接创建一个返回内联视图的组件

# 匿名组件

Laravel Blade 中,何谓匿名组件?

直接在resources/views/components/数据夹底下定义一个Blade视图,而不需要建立Component类

Laravel Blade 中,组件视图可以没有组件类而单独存在吗?

可以,又称为匿名组件

# 数据属性/属性

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

  • 例子

// 在组件视图页面

@props([‘type’ => ‘info’, ‘message’])

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

// 在引用页面

  • :当使用匿名组件时,因为没有关联类,所以@props()直接使用在组件视图页面定义属性,效果同在关联类定义

# 动态组件

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

  • 例子

  • :有时候你可能需要渲染一个组件,但是只有在运行时的时候才知道要渲染哪一个组件,这个时候就可以使用 Dynamic Component 从:component带入指定的组件

# 手动注册组件

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

  • 例子

<?php
使用 Illuminate\Support\Facades\Blade;
使用 VendorPackage\View\Components\AlertComponent;

公共函数 boot()
{
Blade::component(‘package-alert’, AlertComponent::class);
}

  • :Laravel 默认会到resources/views/components以及app\Views\Components资料夹内寻找并注册组件,但如果你在构建一个包,又或者你将组件放在其他位置的话,可以在包服务提供者内的 boot() 注册组件

# 自动加载包组件

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

  • 例子

<?php
// 在包服务提供者中
public function boot()
{
Blade::componentNamespace(‘Nightshade\Views\Components’, ‘nightshade’);
}
// 在引用的页面中
<x-nightshade::calendar />
<x-nightshade::color-picker />

  • :在包服务提供者 boot() 中,注册一个名为'nightshade'Laravel 的命名空间默认会到resources/views/components以及app\Views\Components资料夹内查找并注册组件,但如果你在构建一个包,又或者你将组件放在其他位置的话,可以在包服务提供者内的 boot() 注册。

# 堆栈

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

  • 例子

<?php
@push(‘scripts’)

@endpush

  • 答案:将指令中的脚本压入到名为scripts的堆栈

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

  • 例子

<?php

@stack(‘scripts’)

  • 答案:将 stackscripts里面的内容 pop 出来

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

  • 例子

@push(‘scripts’)
这将是第二个…
@endpush

// 稍后…

@prepend(‘scripts’)
这将是第一个…
@endprepend

  • :当使用@push时,script会依次执行,越先push的越先执行,但可以使用@prepend改变顺序,越后面@prepend的会越先执行

# 服务注入

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

  • 例子

<?php
@inject(‘metrics’, ‘App\Services\MetricsService’)

每月收入:{{ $metrics->monthlyRevenue() }}。
  • 答案:从 Laravel 服务容器获取服务 arg1 要将服务赋值给 的变量,arg 为 Service 的位置

# 延长刀片

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

  • 例子

<?php

命名空间 App\Providers;

使用 Illuminate\Support\Facades\Blade;
使用 Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
public function register()
{
//
}

public function boot()
{
Blade::directive(‘datetime’, function ($expression) {
return “<?php echo ($expression)->format(‘ m/d/YH:i’);>”;
});
}
}

  • :在AppServiceProvider的boot()中,可以使用Blade的directive()来注册客制化的Blade指令定义一个名为datetime的Blade指令,逻辑于定义闭包内

Laravel 中,如果我更新了 Blade 视图,需要清除缓存吗?

如果有跑php artisan view:cache的话,要执行php artisan view:clear清楚

# 自定义 If 语句

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

  • 例子

<?php
// 位于AppServiceProvider
public function boot()
{
Blade::if(‘disk’, function ($value) {
return config(‘filesystems.default’) === $value;
});
}

// 引用页
@disk(‘local’)

@elsedisk(‘s3’)

@else

@enddisk

@unlessdisk(‘local’)

@enddisk

  • 回答

<?php
// 定义一个定制化的 Blade If 语句,逻辑定义于闭包内
public function boot()
{
Blade::if(‘disk’, function ($value) {
return config(‘filesystems.default’) === $值
});
}

// 位于引用页面
@disk(‘local’)

@elsedisk(‘s3’)

@else

@enddisk

thx for reading

@unlessdisk(‘local’)

@enddisk

本作品采用《CC 协议》,转载必须注明作者和本文链接
地球China_mcn
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

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