laravel 简介

2023-11-06

Laravel是一款基于MVC设计模式的PHP框架,提供了一系列便捷的API接口,包括数据库、路由、表单验证等等,使PHP开发更为快速和优雅,一言以蔽:

Laravel为WEB艺术家而生!

1.安装

先保证你已经安装好了PHP,接下来,你可以直接参考官网的安装教程进行安装。

如果遇到网络问题,上述安装教程无法成功安装,你也可以先下载PHP包管理工具composer.phar,用PHP命令行运行安装:

php composer.phar
安装成功后,设置composer的环境变量,以便全局命令行调用,windows下的路径应该是:~\AppData\Roaming\Composer\vendor\bin;

最后通过composer下载Laravel所有依赖文件,运行:

composer create-project laravel/your_project_name –prefer-dist
等待所有文件下载成功,我们能看到项目文件夹中已经有了app、public等等文件夹,主要文件都放置在app/文件夹下,下面会介绍到。

2.路由

路由的设置都写在app/routers.php或者app/Http/routers.php)中,路由有两种,基于get请求和基于post请求的:

Route::get('welcome', function() { return 'hello world by GET'; });
Route::post('welcome', function() { return 'hello world by POST'; });

当然,我们也能实现支持所有请求动作的路由,无论GET还是POST:

Route::any('welcome', function() { return 'hello world'; });

现在,我们访问/welcome时,页面会显示”hello world”。

简单地说,路由的格式为:Route::Method(Path_str, Function_handler). 其中, function_handler可以是定义的controller里面的控制函数。

路由命名

当路由名过长,而我们又需要频繁地获取它的路径时,我们可以为路由命名:

Route::get('lxjwlt_home_page', array('as' => 'home', function() { 
    return 'welcome to my home';
}));

只有为路由命名后,我们才能够通过以下方式获取路由路径:

Route::to('home');

3.视图

视图(view)提供表现层,单纯地提供界面效果,以便使视图代码和逻辑代码分离。

视图文件均放置在resources/views(或者app/views)内,视图代码以HTML的形式呈现,但与HTML不同的是,我们可以通过{{ }}插入PHP语句:

<!-- IN app/views/demo.blade.php -->
<html>
    <head></head>
    <body>
        <h1>{{'1+1='.(1 + 1)}}</h1>
        <b>{{$keyword or 'default value'}}</b>
    </body>
</html>

我们可以通过路由请求可以返回该视图:

Route::get('/', function() {
    return View::make('demo');
});

blade模板

为了页面重复代码,我们通常会提取出页面中公共的部分,比如

以及一些外部资源的引用,再针对不同页面进行相应的组合。

Laravel提供Blade模块引擎,方便我们实现模板继承和模板片段,要注意的是,所有这些模板都必须以.blade.php结尾。

下面我们来实现一个页面layout模板,该模板会被应用到所有页面中:

<!-- IN app/views/layout.blade.php -->
<html>
    <body>
        @yield('content', 'Default content!')
    </body>
</html>

上述代码中,@yield用于声明一个位置,用于插入内容。第一个参数是ID,第二个参数是默认内容,当该content位置为插入内容,则显示默认内容。

接下来我们要实现home页面,该页面继承layout模板:

<!-- IN app/views/home.blade.php -->
@extends('layout')
@section('content')
<h1>welcome to lxjwlt's home</h1>
@stop

home页面继承layout模板,继承要用到关键字@extends。而@section则是用来定义content位置的内容。最终Blade引擎会将home页面渲染成:

<html>
    <body>
        <h1>welcome to lxjwlt's home</h1>
    </body>
</html>

能插入内容还不够,我们还需要满足以下条件:

可引用公共资源,但可覆盖公共资源,可引用特有资源.
下面我们就以home页面引用样式文件为例:

<!-- IN app/views/layout.blade.php -->
<html>
    <head>
        @section('CSS')
        <link rel="stylesheet" href="common.css" />
        @show
    </head>
    <body>
        @yield('content', 'Default content!')
    </body>
</html>

我们在layout模板上引用了common.css,用@section和@show括起来。注意是@show而不是@stop。

现在,我们可以在home页面直接覆盖掉公共样式:

@section('CSS')
<link rel="stylesheet" href="home.css" />
@stop

这样,home页面就只会引用home.css,而不会引用common.css。

当然,我们也可以采用以下写法,在不覆盖掉公共样式的同时,引用其他样式:

@section('CSS')
@parent
<link rel="stylesheet" href="home.css" />
@stop

@parent关键词会保留父模板中事先定义好的内容。上述代码会生成:

<link rel="stylesheet" href="common.css" />
<link rel="stylesheet" href="home.css" />

4.控制器

在Laravel中,我们能够在路由代码中处理数据,并插入到视图中,但我们不应该这么做,而是应该用到控制器,用控制器统一处理后台逻辑,比如登录注销,表单验证等等。

Laravel的控制器代码统一放在app/Http/Controllers( or app/controllers)文件夹下,所有控制器都必须继承BaseController。下面我们实现一个HomeController控制器:

class HomeController extends BaseController {
    public function welcome() {
        $user = array('name' => 'lxjwlt', 'age' => '22');
        return View::make('home', array('user' => $user)); // 传入数据
    }
}

该控制器中有个welcome方法,该方法会返回一个视图。下面,我们将路由和该控制器的welcome动作绑定起来:

Route::get('home', 'HomeController@welcome');
现在,当我们访问/home时,home页面视图将显示出来。

5. 模型

数据库中的每个表都对应一个模型,模型中定义一系列API接口,以便获取对应表中的数据。

Laravel中模型放在app/modules文件夹下,每个模型都必须继承Eloquent类。我们来实现users表的模型:

class User extends Eloquent {
    static public function fetch_by_username($username) {
        // ...
    }
}

我们定义了一个通过用户名来获取用户数据的方法,在任何地方我们都可以这样使用:

User::fetch_by_username('lxjwlt');

6.数据迁移及数据填充

Laravel的数据迁移和填充系统可以重新创建数据库,方便数据库初始化。

可以想象一下,我们将项目文件夹复制到另一台主机上,该主机上没有项目的数据库,但我们只需要运行一条命令,整个数据库就能够重新创建出来,而且初始化数据也已经填充完成,这回非常的方便。

我们先创建一个迁移:

php artisan migrate:make create_users_table
所有的迁移都被存放在app/database/migrations文件夹下。该文件夹会自动生成CreateUsersTable类,其中包含了两个方法,up方法用于创建表,down方法用于删除表。

我们需要一张users表,可以这样写:

class CreateUsersTable extends Migration {
    public function up() {
        Schema::create('users', function($table)
        {
            $table->increments('id'); // 自增
            $table->string('email')->unique();
            $table->string('password');
            $table->string('name')->unique();
            $table->timestamps(); // Laravel自带时间戳
        });
    }
    public function down() {
        Schema::drop('users');
    }
}

有了迁移文件,我们可以运行以下命令,初始化数据库:

php artisan migrate
数据库初始化后,我们可能会需要事先插入一些数据,Laravel也提供了数据填充功能,设置文件统一放在app/database/seeds文件夹下。一个表对应一个文件,比如我们要为users表填充数据:

class UsersTableSeeder extends Seeder {
    public function run()
    {
        DB::table('users')->delete();
        Users::create(array('name' => 'root', 'password' => '123'));
        Users::create(array('name' => 'lxjwlt', 'password' => '123'));
        Users::create(array('name' => 'john', 'password' => '123'));
    }
}

在填充数据前,我们要告诉Laravel,该user表的存在,所以我们要在DatabaseSeeder类声明:

class DatabaseSeeder extends Seeder {
    public function run()
    {
        Eloquent::unguard();
        $this->call('UsersTableSeeder');
    }
}

现在,我们可以执行以下命令填充数据:

php artisan db:seed
我们也可以同时执行数据迁移和数据填充:

php artisan migrate:refresh --seed

7.资源文件引用

资源文件,比如JS脚本,CSS样式文件,图片资源等等,建议放在public文件夹下,这样,我们就可以用Laravel提供的url函数来获取资源的路径:

<link href="{{url('common.css')}}" rel="stylesheet" />

参考

更多Laravel的使用方法,请参考Laravel 手册

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

laravel 简介 的相关文章

  • 如何使用PHP在服务器端缩小图像?

    我有一些从服务器提取的图像 imgUrl保存图像的路径 现在我用 img src width 100 height 200 或 CSS 来缩小图像 但我想在 PHP 中执行此操作 以便将已缩放的图像提供给 DOM 有任何想法吗 Thanks
  • 添加和完成 PHP 源代码文档的工具 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我有几个已完成的较旧的 PHP 项目 其中有很多内容 我想以 javadoc phpDocumentor
  • 将资源文件链接到 Laravel4 中的视图

    您好 我是新手 正在学习 laravel 4 创建应用程序 我正在尝试使用 laravel Blade 将 twitter bootstrap3 文件链接到视图 我安装了一个新的 laravel 应用程序文件夹 为了从 url 路径中删除
  • Laravel Valet 不工作。 127.0.0.1 连接被拒绝

    试图让代客泊车设置正常工作 当访问 127 0 0 1 时 连接被拒绝 这是我在访问 dev 站点设置之一时收到的消息 我已经确保 apache 已停止 并且一直在谷歌上搜索所有地方 但无法找到解决方案 有没有人遇到过这个或对下一步尝试什么
  • 根据产品变体术语将收件人添加到 Woocommerce 电子邮件通知

    我创建了一个 Woocommerce 插件并要求它做两件事 根据购物车中的产品变体 向特定电子邮件地址发送通知消息 电子邮件必须仅包含相关产品 不得包含其他属性的产品 例如 产品 A 具有名为 Chef 的属性 其中 Chef one 和
  • 如何使用 facebook 用户登录我的网站?

    我想知道 facebook 如何让用户登录我们的网站 我的意思是用户需要注册到我的网站才能发表评论 我如何通过我的 php 代码检查它是否是登录用户 我听说你只能用javascript检查它是否是登录用户 感谢您的任何解释 您可以使用脸书
  • Zend 1.11 和 Doctrine 2 自动从现有数据库生成所需的一切

    我是 ORM 新手 我真的很想学习它 我按照本教程成功地使用 Zend 1 11 x 安装了 Doctrine 2 1 的所有类和配置 http www zendcasts com unit testing doctrine 2 entit
  • 您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,了解使用 nea 的正确语法[重复]

    这个问题在这里已经有答案了 我收到这个错误 ERROR ERRORINSERT INTO new comp reg phno fullname address dept desc VALUES 您的 SQL 语法有错误 检查与您的 Mari
  • 如何在xampp中启用zip.dll

    你好 我正在使用 Windows 版 xampp 我想运行 https github com johmue mysql workbench schema exporter 导出我的架构 我在 mysql 工作台中创建架构并保存它 当我运行程
  • 使用服务帐户插入 Google 日历条目

    我正在尝试使用服务帐户在 Google 日历上创建条目 我真的很接近这一点 但最后一行行不通 我得到一个500 Internal Service Error当我让它运行时 否则 程序运行时不会出错 无论其价值如何 The Calendar
  • barryvdh/laravel-dompdf:- fopen 无法打开流:laravel 5.7 中没有这样的文件或目录

    当我想下载发票 pdf 时出现错误 fopen project path storage fonts 071ddd89a9cb147bf5639344caee3fe8 ufm 无法打开流 没有这样的文件或目录 在此输入图像描述 https
  • 通过 PHP CURL 添加 Google 联系人

    我已经成功地通过 Zend Framework 和 PHP 将联系人添加到 google 我也希望能够通过 CURL 来做到这一点 有人有关于如何执行此操作的良好教程吗 我终于能够通过 CURL 和访问令牌来做到这一点 首先 我要说的是OA
  • 如何在 php 中访问名为变量的对象属性?

    以 JSON 编码的 Google API 返回一个如下所示的对象 updated gt stdClass Object t gt 2010 08 18T19 17 42 026Z 任何人都知道我如何访问 t value object gt
  • PHP 使用今天的日期生成一个随机数

    我正在尝试为内容块 在网页上 分配一个随机生成的数字 该数字基于今天的日期 无论是什么 和固定数字 由于某种原因 输出的数字种类存在巨大差异 例如 当我在本地测试我的代码时 生成的数字对我来说足够好 正数 但在实际的实时服务器上时 它们通常
  • 如何在按钮上执行mysql [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions PHP 单击按钮时如何执行 SQL
  • 如何使用 PHP 通过 JSON 发送 HTML 元素?

    以下功能 try query this gt pdo gt prepare SELECT FROM bookings WHERE TourID AND dTourDate and Status NOT LIKE Cancelled quer
  • 简单来说,Laravel IoC 容器是什么?

    谁能用简单易懂的语言解释依赖注入和 IoC 容器 因为我是 Laravel 的初学者 谢谢 答案变得比我最初想要的要长 我提供了一些背景信息 不过 如果您正在寻找短期解释 请阅读 IoC 容器的第一段和粗体段落 依赖注入 依赖注入是一种设计
  • 为什么 count 比 $count 差

    我只是在查看不同问题的答案以了解更多信息 我看到一个answer https stackoverflow com a 4891402 429850这表明在 php 中编写这样的做法是不好的做法 for i 0 i
  • MySQL LAST_INSERT_ID() 和 FOUND_ROWS()

    当 PHP 脚本每秒有数百个查询时会发生什么 它会影响这些函数吗 是否保证它们会返回当前脚本中最后一个插入语句中最后插入的 id 它会返回当前脚本中最后一次选择的行数吗 如果同时从另一个脚本进行新的插入或选择 在 FOUND ROWS 的情
  • PHP7.1上读取会话数据失败

    分享一个我遇到的问题 现已解决 在我的开发机器上 我使用 PHP 运行 IIS 我升级到 PHP7 突然我的代码不再工作 返回此错误 session start 读取会话数据失败 用户 路径 C WINDOWS temp 看起来像是权限问题

随机推荐

  • 关于MaxCompute的基本了解

    大数据计算服务 MaxCompute 原名 ODPS 是一种快速 完全托管的 GB TB PB 级数据仓库解决方案 MaxCompute 为您提供了完善的数据导入方案以及多种经典的分布式计算模型 能够更快速的解决海量数据计算问题 有效降低企
  • 【高数】导数存在,导数就连续吗?

    高数 导数存在 导数就连续吗 一 概念理解 二 问题讨论 三 小结 一 概念理解 函数连续 y f x 在 x 0 的某邻域有定义 且满足下式 也就说明 连续意味着 x 0 处 f x 的极限存在 也即 f x 的左极限 右极限 该点函数值
  • 【STM32】【HAL库】遥控关灯1主机

    相关连接 STM32 HAL库 遥控关灯0 概述 STM32 HAL库 遥控关灯1主机 STM32 HAL库 遥控关灯2 分机 STM32 HAL库 遥控关灯3 遥控器 需求 主机需要以下功能 接收来自物联网平台的命令 发送RF433信号给
  • crmeb多商户系统安装(1)

    服务器配置 以阿里云ECS服务器为例 1 在阿里云控制台 云服务器ECS 实例 点击最右侧更多 实力状态 停止 2 选择停止 点击确定 3 输入短信验证码 4 等待服务器状态为 已停止 点击最右侧更多 磁盘和镜像 更换系统盘 5 点击确定
  • 踩坑日记:java.lang.IllegalStateException: For queries with named parameters you need to use provide ...

    今天的错误是这个 java lang IllegalStateException For queries with named parameters you need to use provide names for method para
  • SQLI-labs-第五关和第六关

    目录 1 判断注入点 2 判断当前表的字段数 3 爆库名 4 爆表名 5 爆字段名 6 爆值 知识点 布尔盲注 思路 1 判断注入点 首先 我们看看正常的回显内容 id 1 接着输入 id 1 结果出现语句错误 这里说明存在单引号的闭合错误
  • 【信号分解】基于辛几何模态SGMD实现信号数据分解附Matlab代码

    作者简介 热爱科研的Matlab仿真开发者 修心和技术同步精进 matlab项目合作可私信 个人主页 Matlab科研工作室 个人信条 格物致知 更多Matlab仿真内容点击 智能优化算法 神经网络预测 雷达通信 无线传感器 电力系统 信号
  • 【网络工程】如何本地调试微信公众号开发教程(Nginx代理方法)

    目录 前言 目的 通过Nginx代理实现本地调试微信公众号 实现工具 实现步骤 1 启动本地前端项目 2 首先配置Nginx 3 填写app conf内容 把本地前端项目与域名形成映射 4 把app conf加入到Nginx配置中 5 打开
  • vue-cordova修改app图标+文字以及启动图

    前言 在使用 vue cordova 打包成apk的时候 我们一定会根据项目改把app的图标还有显示文字 加载图片也有可能改动 这里来说一说这个 1 修改显示文字 地址 D cordova app config xml 修改name里面的文
  • 鸿蒙相符合的图片,鸿蒙操作系统亮相——目标是未来的物联网

    原标题 鸿蒙操作系统亮相 目标是未来的物联网 本文由什么值得买用户原创 太空铁 咱们好 我是太空铁 这两天 华为开发者大会很热闹 华为接连发布了鸿蒙 凌霄以及才智屏等软硬件产品 其间最让人等待的当属鸿蒙操作体系了 鸿蒙操作体系早前可说是进行
  • 系统环境变量修改后需要重启qt才能响应

    修改系统环境变量 不需要重启系统 但需要重启qt才能感知新的环境变量
  • 物业小区管理系统登录页面以及逻辑实现

    学习vue3和springboot那肯定是少不了写项目的 在各个项目中肯定是离不开登录和注册的事情的 这也是一个项目起步的需求 接下来我们来看看我们所写的项目起步 首先搭建vue3和springboot的项目环境 这些搭建大家自行完成即可
  • 《Centos7——实战-完全备份和增量备份》

    目录 完全备份和增量备份 1 需要开启log bin日志 2 增量和全备脚本 3 计划任务 模拟数据丢失 1 新增数据 2 数据备份 3 删除数据 4 数据的恢复 完全备份和增量备份 一般都三种备份种类 完全备份 差异备份 增量备份 完全备
  • Android中的延时工作队列——WorkQueue教程

    Android中的延时工作队列 WorkQueue教程 工作队列是Android开发中常用的一种机制 它允许我们按照一定的顺序和延时执行任务 在本教程中 我们将介绍如何使用Android的WorkQueue来创建延时工作队列 并提供相应的源
  • 云计算————系统部署

    云计算基础篇 前言 云计算 cloud computing 是基于互联网的相关服务的增加 使用和交付模式 通常涉及通过互联网来提供动态易扩展且经常是虚拟化的资源 云是网络 互联网的一种比喻说法 过去在图中往往用云来表示电信网 后来也用来表示
  • hibernate的insert数据正常,但是update数据乱码问题解决

    在做项目是发现 hibernate的insert数据正常 但是update数据是却出现乱码 解决办法 在tomcat的conf server xml中找到下面代码的位置
  • Java JUnit 单元测试小结

    测试类型 单元测试 Unit test 单元测试关注单一的类 它们存在的目的是检查这个类中的代码是否按照期望正确运行 集成测试 Integration test 集成测试是检查开发的模块和其他模块整合时是否正常工作 虽然集成测试的代码影响范
  • 【JavaScript基础】你真正了解如今的Js数组吗,看这篇就(Go)够了

    JavaScript基础 你真正了解如今的Js数组吗 看这篇就 Go 够了 博客说明 文章所涉及的部分资料来自互联网整理 当然还有自己个人的总结和看法 分享的目的在于共建社区和巩固自己 引用的资料如有侵权 请联系本人删除 幸好我在 感谢你来
  • 虚拟化原理之KVM

    2 1 kvm技术基础 KVM kernel based virtual machine 的名字 基于kernel的虚拟机 已经很准确的说出了kvm的设计思路 也就是依赖linux内核 完全利用linux内核来实现cpu的调度 内存管理的功
  • laravel 简介

    Laravel是一款基于MVC设计模式的PHP框架 提供了一系列便捷的API接口 包括数据库 路由 表单验证等等 使PHP开发更为快速和优雅 一言以蔽 Laravel为WEB艺术家而生 1 安装 先保证你已经安装好了PHP 接下来 你可以直