MacOS的Laravel开发
#网络开发人员 #php #laravel #mac

在本文中,我想为您提供有关如何在MacOS上设置开发环境并开始使用Laravel开发PHP应用程序的指南。

内容

设置代客

代客是MacOS的轻巧的Laravel开发环境,随附Nginx。它提供了代理,可以将所有请求指向已配置的域上,以指向本地计算机上的已安装站点。

安装与自制的组件

转到Homebrew并复制安装命令并在您的终端中运行。

# Update homebrew
brew update

# Install PHP
brew install php

# Install composer
brew install composer

运行以下命令,看看是否在任何地方说“作曲家”:

echo $PATH

如果没有,则必须在路径中添加作曲家。将以下行添加到外壳配置中。我使用 zsh 作为我的外壳,所以我可以将其添加到〜/.zshrc

export PATH=$PATH:$HOME/.composer/vendor/bin

刷新外壳配置:

# Refresh zsh configuration
source ~/.zshrc

安装代客

# Actually install valet with composer
composer global require laravel/valet
valet install
composer global require laravel/installer

创建一个项目

确保导航到要创建Laravel项目的项目文件夹。

# Create new project
laravel new PROJECT_NAME

使用代客

告诉代客将当前文件夹用作Laravel项目。

valet park

您现在可以在选择的IDE中打开您的项目,并浏览您的项目URL(例如http://PROJECT_FOLDER.test

如果您想查看所有“停放”项目执行以下执行。

valet parked

Laravel项目结构

laravel在模型视频控制器结构中组织。

MVC

模型/app/型号下找到。这些是可能借助Laravel CLI工具生成的数据模型。

视图/Resources/countion 下找到。视图通常为 .blade.php 模板,但它们不必。

控制器/app/http/Controllers 下找到。控制器用于处理业务逻辑并在模型的帮助下获取正确的数据,以将其传递给请求的视图。

路线

Laravel可以为“正常” Web应用程序以及API配置路由。

“正常”路由是在/routes/web.php 和API路由下配置的。

路由配置

路由可以使用绝对路径或动态参数(通配符)进行配置,如下所示。

// Get all
Route::get('/', function() {
    return view('listings', [
        'heading' => 'Latest Listings',
        'listings' => Listing::all()
    ]);
});

// Get by id
Route::get('/listings/{id}', function($id) {
    return view('listing', [
        'listing' => Listing::find($id)
    ]);
});

查询字符串参数可以在Illuminate\Http\Request类的帮助下读取。

use Illuminate\Http\Request;

// Get query string parameters
Route::get('/search', function(Request $request) {
    return view('search', [
        'name' => $request->name,
        'city' => $request->city
    ]);
});

也可以向路线添加约束,仅允许特定值。

// Get by id -> id has to be a number
Route::get('/posts/{id}', function($id) {
    return view('post', [
        'post' => Post::find($id)
    ]);
})->where('id', '[0-9]+');

为了从API路线返回JSON,您可能会执行以下操作。

Route::get('/posts', function() {
    return response()->json([
        'posts' => [
            [
                'title' => 'Post One'
            ]
        ]
    ]);
});

从路线调用控制器动作

如果要在路由中调用控制器操作,则首先需要创建控制器。

php artisan make:controller ListingController

在控制器中您可以为所有操作创建公共功能。

// Show all listings
public function index() {
    return view('listings', [
        'listings' => Listing::all()
    ]);
}

// Show single listing
public function show(Listing $listing) {
    return view('listing', [
        'listing' => $listing
    ]);
}

路由定义可以比以下方式更改,我们在控制器类和操作/函数名称中传递。

// Get all
Route::get('/', [ListingController::class, 'index']);

// Get by id
Route::get('/listings/{listing}', [ListingController::class, 'show']);

路线行动命名约定

Laravel中的公共资源路线如下。

索引 - 显示所有项目
显示 - 显示一个项目
创建 - 显示创建新项目的表格
商店 - 存储新项目
编辑 - 显示一个表格编辑现有项目
更新 - 更新现有项目
销毁 - 删除现有项目

配置

可以在/config 下找到不同的系统配置文件。

数据库

/config/database.php 文件中,您可以配置应使用哪种类型的数据库(例如mysql或sqlite等)。

要配置数据库连接,您可以在项目root文件夹中编辑 .env 文件。

刀片模板

Blade是一个简单的模板引擎,已包含在Laravel中。刀片模板被编译为普通的PHP代码。

将数据传递到视图

刀片视图(模板)可以使用全局 view 助手从路线或控制器返回。

Route::get('/', function() {
    return view('greeting', ['name' => 'Finn']);
});

在视图中显示数据

name 变量可以如下显示在刀片​​模板中。

Hello, {{ $name }}

刀片指令

刀片指令由@符号逃脱。这些指令的功能与PHP对应物相同。根据https://laravel.com/docs/9.x/blade
可以找到详细的文档

@if (count($records) === 1)

    <p>I have one record!</p>

@elseif (count($records) > 1)

    <p>I have multiple records!</p>

@else

    <p>I dont have any records!</p>

@endif

<h1>{{ $heading }}</h1>

@if(count($listings) == 0)

    <p>No listings found</p>

@endif


@foreach($listings as $listing)

    <h2>    
        <a href="/listings/{{$listing['id']}}">{{$listing['title']}}</a>    
    </h2>

    <p>{{$listing['description']}}</p>

@endforeach

检查是否存在项目的替代方法是@unless指令。

@unless(count($listings) == 0)
    @foreach($listings as $listing)
        <h2>{{$listing['title']}}</h2>
        <p>
            {{$listing['description']}}
        </p>
    @endforeach
@else
    <p>No listings found</p>
@endunless

数据库处理

laravel支持不同的数据库系统,例如mysql,sqlite等。

mysql

# Start MySQL server
mysql.server start

# Login with root
mysql -u root -p

# Stop MySQL server
mysql.server stop

1.您应该为您的项目创建专用的MySQL用户

CREATE USER 'someuser'@'localhost' IDENTIFIED BY 'somepassword';

2.创建一个数据库

CREATE DATABASE somedatabasename;

3.授予新创建的用户访问数据库

GRANT ALL PRIVILEGES ON somedatabasename.* TO 'someuser'@'localhost';
FLUSH PRIVILEGES;

4.使用数据库设置更新项目根中的 .env 文件

迁移

数据库架构 /结构由数据库迁移管理。迁移可以在/数据库/迁移中找到。

创建一个新的迁移

创建一个新的迁移以创建一个名为 listings 执行以下命令的表。

php artisan make:migration create_listings_table

在迁移中添加表列

打开新创建的迁移文件(类似于2023_02_17_101605_CREATE_LISTINGS_TABLE.PHP),然后在 up up> up methot中添加丢失的列。

public function up()
{
    Schema::create('listings', function (Blueprint $table) {
        $table->id();
        $table->string('title');
        $table->string('tags');
        $table->string('company');
        $table->string('location');
        $table->string('email');
        $table->string('website');
        $table->longText('description');
        $table->timestamps();
    });
}

运行迁移

为了将迁移应用于数据库,请执行以下命令。

php artisan migrate

种子数据库

要在数据库中生成“虚拟”数据,您可以更新 run 方法,在/database/seeders/databaseseeder.php 文件中找到。在这里您可以调用工厂方法。

要实际执行数据库种子,请执行以下命令。

php artisan db:seed

刷新 /擦除数据库

要刷新 /擦除数据库,您可以执行以下命令。这将重新运行迁移并重新创建所有表。 注意:这将删除表数据

php artisan migrate:refresh

如果要刷新数据库,但也想执行数据库种子,您可以执行以下操作。

php artisan migrate:refresh --seed

创建模型

laravel使用雄辩的默认 orm 。要创建雄辩的模型,您可以执行以下命令。

php artisan make:model ModelName

创建工厂

工厂存储在/数据库/工厂下,可以如下创建。

php artisan make:factory FactoryName

定义函数中,您可以在Faker的帮助下创建对象。

public function definition()
{
    return [
        'title' => $this->faker->sentence(),
        'tags' => 'laravel, api, backend',
        'company' => $this->faker->company(),
        'email' => $this->faker->companyEmail(),
        'website' => $this->faker->url(),
        'location' => $this->faker->city(),
        'description' => $this->faker->paragraph(5),
    ];
}

共享元素

可以在Laravel中扩展视图。通过这样做,可以在一个文件中定义一般页面布局,并将此布局扩展到附带特定内容。

您可以在/resources/views/下创建 _Layout.blade.php 文件。将以下内容添加到其中,您要包含特定侧面内容。

@yield('content')

创建实际侧面布局时,您可以按以下方式扩展一般页面布局。

@extends('_layout')

@section('content')

<h2>{{$listing['title']}}</h2>
<p>{{$listing['description']}}</p>

@endsection

部分

有时您想在多个页面上重新使用UI元素。为此,您可以将a部分包括在您的身边。

创建文件夹/resources/views/partials ,例如添加一个称为 _Search.blade.php 的文件,然后将布局(等)添加到其中。然后,您可以将其包含在不同的页面中,您希望它显示如下。

@include('partials/_search')

成分

组件 partials 相似,您能够向组件提供数据(例如模型)。

创建文件夹/resources/views/components ,例如添加一个称为 listing-card.blade.blade.php 的文件,然后添加您的布局(等) 。为了接收传递给组件的数据添加以下内容。

@props(['listing'])

<h3>
    <a href="/listings/{{$listing->id}}">{{$listing->title}}</a>
</h3>

为了使用组件并将数据传递给它,如下所示。

@foreach($listings as $listing)
    <x-listing-card :listing="$listing"/>
@enddoreach

封闭组件

如果要使用组件来包装其他内容,例如如果您将创建具有特定背景和边框的 card 组件,则可以执行以下操作。

添加一个新组件,然后插入插槽以封闭内容的定位。为了定义默认CSS类,您可以使用$attributes->merge函数。

<div {{$attributes->merge(['class' => 'bg-gray-50 border border-gray-200 rounded p-6'])}}>

    {{$slot}}

</div>

并将其像“普通” HTML标签一样使用。提供的CSS类将添加到组件本身定义的默认类中。

<x-card class="p-10">
    <p>Something in the card component</p>
</x-card>