推荐使用
composer的方式按照.composer属于PHP语言里的第三方包(插件库)的管理器; 类似于NodeJS里的的npm;
composer安装及简介, 参考:
http://docs.phpcomposer.com/00-intro.html#Installation-*nix
#install Laravel
composer global require "laravel/installer"
# config path ...
# create Project
laravel new laravelStudy
# 安装完成后, 对storage目录配置权限
chmod -R 777 storage //775是不行的!使用
laravel所创建的应用的项目结构:
.
├── app
├── artisan
├── bootstrap
├── composer.json
├── composer.lock
├── config
├── database
├── package.json
├── phpunit.xml
├── public
├── readme.md
├── resources
├── routes
├── server.php
├── storage
├── tests
├── vendor
├── webpack.mix.js
└── yarn.lock
10 directories, 9 files-
app/目录下即为 我们的项目/应用核心代码。 -
bootstrap/, 此bootstrap非彼Bootstrap; 创建时生成的, 用于框架的启动和自动载入配置, 其下的cache文件夹包含框架生成的启动文件,用来提升性能。 -
config/, 包含应用所有配置文件 -
database/, 数据迁移、填充文件 -
public/, 前端控制器和资源文件(图片、JS、CSS3) -
resources/, 前端视图文件、资源文件(JS、SASS、) -
routes/, 所有路由定义,
web.php文件包含web中间件路由: 会话、CSRF、Cookie 加密等; 如果都是restful风格的API, 则路由定义在api.php中。
-
storage/, 编译过的blade模板, 文件缓存 ... -
test/, 测试, 单元测试代码。 -
vendor, 第三方依赖
# tree -L 2
├── Console
│ └── Kernel.php
├── Exceptions
│ └── Handler.php
├── Http
│ ├── Controllers
│ ├── Kernel.php
│ └── Middleware
├── Providers
│ ├── AppServiceProvider.php
│ ├── AuthServiceProvider.php
│ ├── BroadcastServiceProvider.php
│ ├── EventServiceProvider.php
│ └── RouteServiceProvider.php
└── User.php
6 directories, 9 files新项目创建完毕后, app目录即为上所示。
Console/ 和 Http 目录提供进入应用的核心API, 不包含应用逻辑, 2种向应用发布命令的方式。 Console/目录包含了所有的Artisan命令, Http目录包含控制器controller、中间件、请求。
Exception/目录包含应用的异常处理器, 应用抛异常。
app目录下的很多类可以用过命令生成,就是
Artisan命令, 使用帮助:php artisan list make;artisan是Laravel框架内置命令行接口工具, 提供了一些列命令方便应用程序开发。
php artisan --version 查看当前 Laravel 框架版本号.
# php artisan list make
Laravel Framework 5.5.27
Usage:
command [options] [arguments]
Options:
-h, --help Display this help message
-q, --quiet Do not output any message
-V, --version Display this application version
--ansi Force ANSI output
--no-ansi Disable ANSI output
-n, --no-interaction Do not ask any interactive question
--env[=ENV] The environment the command should run under
-v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
Available commands for the "make" namespace:
make:auth Scaffold basic login and registration views and routes
make:command Create a new Artisan command
make:controller Create a new controller class
make:event Create a new event class
make:exception Create a new custom exception class
make:factory Create a new model factory
make:job Create a new job class
make:listener Create a new event listener class
make:mail Create a new email class
make:middleware Create a new middleware class
make:migration Create a new migration file
make:model Create a new Eloquent model class
make:notification Create a new notification class
make:policy Create a new policy class
make:provider Create a new service provider class
make:request Create a new form request class
make:resource Create a new resource
make:rule Create a new validation rule
make:seeder Create a new seeder class
make:test Create a new test class项目根目录下文件
-
.evn, 直接参考此处: https://docs.golaravel.com/docs/5.0/configuration/#environment-configuration, 该文件不应被提交到git -
.env.example,.env的示例文件, 其中APP_DEBUG只能在本地dev开发环境中设置为true!!! prod一定要设置为FALSE, 切记!!! -
artisan, laravel提供的命令行工具 -
composer.json, 类似npm的package.json -
.gitignore, ignore文件,不被git track 和 control;.gitattributes, 属性配置 便于github等系统识别该项目主要语言。 -
server.php, 模拟服务器的rewrite功能 -
yarn.lock, yarn相关配置, 类似于node项目install后根目录下的那个xxx-lock文件。 -
_ide_helper.php, 安装插件后产生的IDE帮助文件类
很多项目环境变量设置直接在
.env文件中设置 如:APP_DEBUG字段,/config/app.php中设置不起作用!
准备开始体验Laravel
当前版本信息:
"laravel/framework": "5.5.*"laravel -version
Laravel Installer 1.5.0
php artisan -version
Laravel Framework 5.5.27
本地使用Apache加载PHP解析模块的方式(非php-fpm), 需要对Apache做以下修改:
#apache
cd ~
vim /etc/apache2/httpd.conf
# 1.找到.htaccess, 将 AllowOverride None 改为: AllowOverride all
# 2. 将#LoadModule rewrite_module modules/mod_rewrite.so 前的#井号去掉, 重启Apache即可。
本地访问:
本机Apache设置的Document root目录为/Users/xx/Sites/, sites是Sites目录下的其中一个目录。
http://localhost/sites/laravelStudy/public/test, 正常。(web.php里的路由)
http://localhost/sites/laravelStudy/public/api/testApi, 正常。(api.php里的路由)
http://localhost/sites/laravelStudy/public/api/student/queryAll, OK, 哈哈。
在远程虚拟服务器centos6.5上也安装如上配置后,发现访问的是404.
继续修改服务器Apache的配置文件:
vim /etc/httpd/conf/httpd.conf
由于本服务器上设置的站点目录为: /data/website/, 所以先找到该关键字, 再找到下方的AllowOverride, 并将none改为all。 如下。
<Directory />
Options FollowSymLinks
AllowOverride all
</Directory>
测试:
http://client-qatools.jdb-dev.com/laravela/public/home, 正常。 (基于web.php的路由)
http://client-qatools.jdb-dev.com/laravela/public/users/lomo, 显示正常。
http://client-qatools.jdb-dev.com/laravela/public/api/testApi, 正常。(基于api.php的路由)
总结:
Rewirte主要的功能就是实现URL的跳转和隐藏真实地址,基于Perl语言的正则表达式规范。平时帮助我们实现拟静态,拟目录,域名跳转,防止盗链等
php artisan down, 开启维护模式,访问该应用任何页面或接口 均提示 Be right back.。
与之对应的: php artisan up, 启动正常服务。
#install
composer require barryvdh/laravel-ide-helper
#在 config/app.php 添加以下内容到 providers 数组
Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider::class,
#运行以下命令生成代码对应文档
php artisan ide-helper:generate
# 添加ignore `.gitignore`中, 该配置可能只是当前开发者IDE所需
.idea
_ide_helper.php
_ide_helper_models.php
.phpstorm.meta.php
Nginx配置:
server{
listen 8000;
server_name localhost;
}
通过 laravel new xx 生成后, 进行基本的简单配置, 时区、语言等等
/laravelStudy/config/下的 app.php, APP_DEBUG 在本地开发环境时可以修改为trueUTC, 线上环境坚决为FALSE
timezone 由 UTC => PRC ,北京时区.
/laravelStudy/config/database.php, mysql 数组, 在这里修改吗? 错错错!!!
Laravel 高版本, 起码我现在用的这个5.5版本 通过composer安装时,项目根目录下生产了一个.evn文件,该文件里有一些通用的配置, 且该配置里的所有信息都会存在一个$_ENV的超级全局变量内。
官方文档有说明
修改 项目根目录下 .env文件:
DB_DATABASE=laravelStudy
DB_USERNAME=root
DB_PASSWORD=你的密码# 开启运行
php artisan serve
项目根目录下:
使用artisan命令创建控制器。语法: controller:make 控制器名;
创建一个resource类型的控制器
php artisan make:controller laravelStudyTestController
# 生成该命令创建的控制器位于 /laravelStudy/app/Http/Controllers/laravelStudyTestController.php.
控制器创建完毕后, 添加路由, 让路由使用刚才创建的那个控制器去处理请求。路由就是一个HTTP 请求或 一个接口请求的URL地址。
所有的路由都在routes/文件夹中配置。
routes/web.php => web应用
Route::get('test', function () {
return 'Hello, This is Route /test';
});浏览器打开: http://127.0.0.1:8000/test, 即可看到结果。
接口:
api.php中配置路由:
Route::get('testApi', function () {
return json_encode(array("error" => array("returnCode" => "0", "returnMessage" => "测试接口--testApi, Successful!"), "data" => null));
});http://127.0.0.1:8000/api/testApi
配置可以携带参数的:
Route::get('user/{id}', 'laravelStudyTestController@showProfileJSON');controller:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class laravelStudyTestController extends Controller
{
public function showProfileJSON($id) {
return json_encode(array("error" => array("returnCode" => "02", "returnMessage" => "测试接口--testApi, Successful!"), "data" => "接收到的ID: ".$id));
}
}测试: 浏览器打开: http://localhost:8000/api/user/sdfsdfsdf%E6%B0%B4%E7%94%B5%E8%B4%B9123
返回:
{
"error": {
"returnCode": "02",
"returnMessage": "测试接口--user, Successful!"
},
"data": "接收到的ID: sdfsdfsdf水电费123"
}在项目根目录下 运行
valet share即可看到公网URL生成。
当我们在浏览器中访问URL: http://5f27a60f.ngrok.io/api/user/123a 会在本地终端中看到基本的请求信息。
修改Apache配置后,(我自己)本地公网访问地址:
# api.php :
https://6c243e7b.ngrok.io/sites/laravelStudy/public/api/student/queryAll,
#web.php :
http://6c243e7b.ngrok.io/sites/laravelStudy/public/test
依赖valet组件, valet安装步骤如下:
-
brew update
-
composer global require laravel/valet
-
valet install #该命令会自动停止nginx然后按照一些nginx配置、php71(如果没安装)
测试:
xxx.dev 在本地均可以ping通。
升级:
composer global update
valet install
Valet常用命令:
park、start、stop、restart、uninstall、path
park命令会将执行当前命令所在的目录当做Web根目录。
本地开发, 建议直接使用 php artisan serve 启动8000端口的一个服务方便。 其它已安装的Apache、Nginx都不需要改动。
/routes/web.php
// 限定请求方式
Route::match(['get', 'post'], 'multiple', function () {
return "multiple: only get/post request";
});
//不限定请求方式
Route::any('any', function (){
return "any request method supported.";
});
//携带参数
Route::get('user/{id}', function ($id) {
return 'Hello '.$id;
});
//可选参数 optional params, default => lomo
Route::get('users/{name?}', function ($name = 'lomo') {
return 'Hello '.$name;
});
//表达式限制
Route::get('usera/{age?}', function ($age = '0') {
return 'User Age = '.$age;
})->where('age', '[0-9]{0,3}');
//路由别名, 可以在控制器、模板中直接使用别名,防止该文件中的路由变化时哪些文件也需要去修改。
Route::get('user/user-center', ['as' => 'userCenter', function() {
return route('userCenter');
}]);
// 路由群组, 前缀
// http://127.0.0.1:8000/member/usera/123
// http://127.0.0.1:8000/member/users/123
Route::group(['prefix' => 'member'], function () {
Route::get('usera/{age?}', function ($age = '0') {
return 'member-User Age = '.$age;
})->where('age', '[0-9]{0,3}');
Route::get('users/{name?}', function ($name = 'lomo') {
return 'Hello member-'.$name;
});
});视图以及视图中的变量
resource/views/下, 新建一个视图文件: testView.blade.php
<?php
echo "Test View....<br>";
echo "Name: ". $name. " Age: ". $age;app/Http/Controllers/下,新建控制器: testViewController
<?php
namespace App\Http\Controllers;
class testViewController extends Controller {
public function testViews() {
return view('testView', [
'name' => 'Lomo',
'age' => '20'
]);
}
}配置路由, /routes/web.php
Route::get('testview', 'testViewController@testViews');测试:
http://127.0.0.1:8000/testview
ok, 一切正常。
新建模型 php artisan make testViewModel ,在app/下创建了model文件。但是在controller中调用时发现始终报错!
尝试 composer dump-autoload 后依然报错,说 Class 'app\testViewModel' not found
注意: view 模板里的变量一定要和controller传的保持一致,否则就报此错误!!!
先创建一个数据库名为
laravelStudy, 再在其中创建一个表:student, 表结构如下
USE `laravelStudy`;
CREATE TABLE IF NOT EXISTS `student` (
`id` int(8) NOT NULL AUTO_INCREMENT,
`name` varchar(20) NOT NULL COMMENT '姓名',
`age` int(8) NOT NULL COMMENT '年龄',
`sex` int(2) COMMENT '行性别,0->male,1-female',
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `descDate` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='介绍-partOne' AUTO_INCREMENT=1 ;
update_timetimestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP, ON UPDATE 会在数据发生更新时 数据库自动更新该字段值。
通过浏览器Get请求接口增删改查数据demo:
增加数据:
路由配置:
/routes/api.php:
控制器生成: php artisan make:controller xxxController, 注意: 使用命令创建时 api.php里的空的路由要先注释掉 否则报错。
访问:
查询所有的结果:
http://127.0.0.1:8000/api/student/queryAll, 或 http://localhost/sites/laravelStudy/public/api/student/queryAll
查询某一个: http://127.0.0.1:8000/api/student/query/lomo
添加:
http://127.0.0.1:8000/api/student/add/lomo2/23/0, 若果使用php artisan serve内置服务访问
使用系统配置的服务器访问: http://localhost/sites/laravelStudy/public/api/student/add/lomo111/23/0
更新: http://127.0.0.1:8000/api/student/update/1/26
删除: http://127.0.0.1:8000/api/student/del/9
DB::table('表名')->truncate(); //该操作不返回任何值, 谨慎!
laravel-Email
laravel-cookie
laravel-session
laravel-jwt
laravel-Log
TODO --
之前里DB类的一些数据库操作方法是需要拼接sql语句! ORM里则看不到这种SQL语句。
ORM => Object Relation Mapping. 对象关系映射. 它是作用: 在关系型数据库(如:MySQL、MariaDB等)和业务实体对象之间作一个映射。可以简单理解为, ORM取代了我们传统里所编写的数据库操作相关的helper类。
Laravel中的Eloquent ORM 提供了简洁的ActiveRecord实现来和数据库交互, 每个数据库表和一个对应的模型 用来与数据表进行交互。
参考:
https://docs.golaravel.com/docs/5.0/eloquent/
Laravel ORM 使用场景: 大型、复杂应用。小型直接使用DB类即可。
建立模型
#为student表建立模型
php artisan make:model StudentModel
//queryStudentController 添加查询
public function ormQuery()
{
$students = StudentModel::all();
dd($students);
}
//路由 api.php
Route::get('ormQuery', 'queryStudentController@ormQuery');Test:
http://localhost/sites/laravelStudy/public/api/ormQuery
Pass.
TOP 100 扩展包