www.getcomposer.org
www.phpcomposer.com
composer.exe 一装到底,在第二步的时候选择php.exe 安装的位置
命令行下安装:在 cmd 命令行下,先cd 到安装位置:
C:\Users\Administrator>d:
D:\cd wamp64
D:\wamp64>cd www
D:\wamp64\www>cd test
D:\wamp64\www\test>composer create-project laravel/laravel --prefer-dist
这样会安装的结果是: D:\wamp64\www\test\laravel
如果第一次安装,会自动下载并创建相应文件名的文件夹。如创建另外的文件夹
composer create-project laravel/laravel blog --prefer-dist
启用镜像服务的方式有两种:
系统全局配置:即将配置信息添加到 composer 的全局配置文件 config.json中
名单个项目配置:将配置信息添加到某个项目的 composer.json 文件中
修改composer的全局配置文件(cmd):
composer config -g reop.packgist composer https://packagist.phpcomposer.com
创建一个test文件夹,里面txt写一个 composer.json 配置文件,写入命令(cmd):
composer config repo.packagist composer https://packagist.phpcomposer.com
1. wampp准备
2. 把blog文件夹上传到 SourceTree 新建/克隆
3. 开启rewrite 和 vhost
3.1. D:\wamp64\bin\apache\apache2.4.18\conf\httpd.conf
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule vhost_alias_module modules/mod_vhost_alias.so
Include conf/extra/httpd-vhosts.conf //这是虚拟机的
## rewrite/vhost 前面的 # 删掉
AllowOverride all
Require all granted
3.2 D:\wamp64\bin\apache\apache2.4.18\conf\extra\httpd-vhosts.conf
ServerName blog
DocumentRoot D:/wamp64/www/code/blog/
3.3 C:\Windows\System32\drivers\etc\HOSTS
在127.0.0.1 localhost 下面再加上一行 127.0.0.1 blog
3.4 重启wamp 浏览器地址栏输入 blog.hd/public/ 就可以直接登陆laravel欢迎界面了
3.5 D:\wamp64\bin\php\php5.6.19、php.ini
extension = php_openssl.dll
extension = php_mbstring.dll
extension = php_pdo_mysql.dll
4.D:\wamp64\www\code\blog\server.php 将server.php 改名index.php 直接运行blog
4.1 复制D:\wamp64\www\code\blog\public\.htaccess 到 blog 文件夹下。做伪静态文件
vhost文件修改
C:\wamp\bin\apache\apache2.4.9\conf\extra\httpd-vhosts.conf
ServerAdmin [email protected]
DocumentRoot "g:/code/blog/public/"
ServerName blog.hd
ErrorLog "logs/dummy-host2.example.com-error.log"
CustomLog "logs/dummy-host2.example.com-access.log" common
注:独立服务器,有修改入口文件目录权限或者子目录绑定域名的情况下使用本方法
开发工具
phpstorm (代码提示强,特别是对laravel可设置同步修改文件)
sublime/Atom (Atom 出的插件写代码的时候效果较好)
Hbulider (国人开发 性能要求高,安装包多,但运行占资源)
Zend Studio(重型坦克。没有针对larvel做特别开发。)
Eclipe (需要装插件)
Visual Studio Code
框架结构:目录结构/composer.json
目录或文件 说 明
|– app 包含Controller、Model、路由等在内的应用目录,大部分业务将在该目录下进行
| |– Console 命令行程序目录
| | |– Commands 包含用于命令行执行的类,可在该目录下自定义类
| | |– Kernel.php 命令调用内核文件,包含commands变量(命令清
| | | 单,自定义的命令需加入到这里)和schedule方法(用于任务调度,即定时任务)
| |– Events 事件目录
| |– Exceptions 包含了自定义错误和异常处理类
| |– Http HTTP传输层相关的类目录
| | |– Controllers 控制器目录
| | |– Middleware 中间件目录
| | |– Requests 请求类目录
| | |– Kernel.php 包含http中间件和路由中间件的内核文件
| | |– routes.php 强大的路由
| |– Jobs 该目录下包含队列的任务类
| |– Listeners 监听器目录
| |– Providers 服务提供者目录
| |– User.php 自带的模型实例,我们新建的Model默认也存储在该目录
|– bootstrap //框架启动载入目录
| |– app.php 创建框架应用实例
| |– autoload.php 自动加载
| |– cache 存放框架启动缓存,web服务器需要有该目录的写入权限
|– config !!!各种配置文件的目录
| |– app.php 系统级配置文件
| |– auth.php 用户身份认证配置文件,指定好table和model就可方便使用身份认证
| |– broadcasting.php 事件广播配置文件
| |– cache.php 缓存配置文件
| |– compile.php 编译额外文件和类需要的配置文件,一般用户很少用到
| |– database.php 数据库配置文件
| |– filesystems.php 文件系统配置文件,这里可以配置云存储参数
| |– mail.php 电子邮件配置文件
| |– queue.php 消息队列配置文件
| |– services.php 可存放第三方服务的配置信息
| |– session.php 配置session的存储方式、生命周期等信息
| |– view.php 模板文件配置文件,包含模板目录和编译目录等
|– database 数据库相关目录
| |– factories 5.1以上版本的新特性,工厂类目录,也是用于数据填充
| | |– ModelFactory.php 在该文件可定义不同Model所需填充的数据类型
| |– migrations 存储数据库迁移文件
| |– seeds 存放数据填充类的目录
| | |– DatabaseSeeder.php 执行php artisan db:seed命令将会调
| | | 用该类的run方法。该方法可调用执行该目录下其
| | | 他Seeder类,也可调用factories方法生成
| | | ModelFactory里定义的数据模型
| | |
|– public !!!网站入口,应当将ip或域名指向该目录而不是根目录。
可供外部访问的css、js和图片等资源皆放置于此
| |– index.php 入口文件
| |– .htaccess !!!Apache服务器用该文件重写URL
| |– web.config !IIS服务器用该文件重写URL
|– resources 资源文件目录(静态资源)
| |– assets 可存放包含LESS、SASS、CoffeeScript在内的原始资源文件
| |– lang 本地化文件目录(语言包)
| |– views !!!视图文件就放在这啦
|– storage 存储目录。web服务器需要有该目录及所有子目录的写入权限
| |– app 可用于存储应用程序所需的一些文件
| |– framework 该目录下包括缓存、sessions和编译后的视图文件
| |– logs 日志目录
|– tests 测试目录
|– vendor 该目录下包含Laravel源代码和第三方依赖包
|– .env !!!针对本地环境配置的文件。config目录下的配置文
| | 件会使用该文件的参数,不同生产环境使用不同的.env文件即可。
|– artisan 强大的命令行接口,你可以在app/Console/Commands下编写自定义命令
|– composer.json !!!存放依赖关系的文件
|– composer.lock !!!锁文件,存放安装时依赖包的真实版本
|– gulpfile.js gulp(一种前端构建工具)配置文件
|– package.json gulp配置文件
|– phpspec.yml phpspec(一种PHP测试框架)配置文件
|– phpunit.xml phpunit(一种PHP测试框架)配置文件
|– server.php PHP内置的Web服务器将把这个文件作为入口。
以public/index.php为入口的可以忽略掉该文件
{
"name": "laravel/laravel", //项目名称
"description": "The Laravel Framework.", //描述
"keywords": ["framework", "laravel"], //关键词
"license": "MIT", //许可协议 MIT 可修改但要保留原版信息
"type": "project", //类型
"require": {
"php": ">=5.5.9", //PHP版本
"laravel/framework": "5.2.*" //框架版本
},
"require-dev": { //依赖包
"fzaninotto/faker": "~1.4",
"mockery/mockery": "0.9.*",
"phpunit/phpunit": "~4.0",
"symfony/css-selector": "2.8.*|3.0.*", //这是个内核
"symfony/dom-crawler": "2.8.*|3.0.*" //lavel是根据这个改的
},
"autoload": { //自动加载
"classmap": [
"database"
],
"psr-4": { //一种自动加载的规范
"App\\": "app/"
}
},
"autoload-dev": { //加载测试
"classmap": [
"tests/TestCase.php"
]
},
"scripts": { //执行脚本
"post-root-package-install": [
"php -r \"copy('.env.example', '.env');\"" //这和.env文件是一样的
],
"post-create-project-cmd": [
"php artisan key:generate" //生成随机数的命令。保证session/cookie的安全
],
"post-install-cmd": [
"php artisan clear-compiled", //清理安装过程文件
"php artisan optimize" //清理安装完成后的垃圾文件
],
"post-update-cmd": [
"php artisan clear-compiled",
"php artisan optimize"
]
},
"config": { //配置项
"preferred-install": "dist" //优先安装压缩版
},
"repositories": { //配置composer镜像
"packagist": {
"type": "composer",
"url": "https://packagist.phpcomposer.com" //中文镜像地址
}
}
1.有效路由的方法 先打开 blog\app\Http\routes.php 文件
Route::get($uri,$callback);
Route::get('/blog',function(){
echo 'get';
});
Route::post($uri,$callback);
Route::put ($uri,$callback);
Route::patch ($uri,$callback);
Route::delete ($uri,$callback);
Route::options($uri,$callback);
有时候需要注册路由响应多个HTTP请求,可以通过 match 方法来实现,或者甚至可以使用 any 方法注册一个路由响应所有的HTTP请求
Route::match(['get','post'],'/test',function(){
echo 'succ';
});
Route::any('foo',function(){});
2. 必选参数
Route::get('user/{id}',function($id){ //user 后面括号里的 id 是路由的必填参数
##注意:User_参数 / - _ 都可执行
return 'User'.$id; // $id无实意 浏览器地址栏 blog/User/10 返回user 10
}); //输出用echo同return。
Route::get('posts/{post}/comments/{comment}',function($postId,$commentId){
return '$postId'; //在浏览器地址栏输入 blog/posts/20/commments/30 返回 20
return '$commentId';//在浏览器地址栏输入 blog/posts/20/commments/30 返回 30
});
3. 可选参数
Route::get('user/{id?}',function($id){ //user后id可不填,但user 后面的可选参数不填
时,function里面的闭包函数($id=null) 才有输出
return 'User'.$id; // 闭包函数$id 也可以先赋一个默认值,就可直接打印默认值
}); //
谷歌浏览器->更多工具->添加程序->开发者模式->获取更多拓展程序->查找添加->返回拓展程序页面->详细信息->添加到桌面
手动创建方法:所有 laravel 方法都要在路由里面去配置路径
根据larvel 结构是
1.submit user Request(提交请求)->
2.Routing(路由)->3.controller(控制器提交View和Model)->
4.->View(视图层)
4.<->(控制器和和Model互相交换信息)Model(Model和数据库连接并返回信息)<->Database
控制器的位置:HTTP/Controllers/Controller.php 这是全局的基本控制器,仅供调用一些方法
1.配置路径 打开 blog\app\Http\routes.php
写入 Route::get('test','Admin\IndexController@Index');
## 小伙子!!!这个地方的反斜线,一定不能搞错。不然要找不到admin下的index方法的!!!
## test 是浏览器路径
## IndexController 是控制器的名字
## @ 后面的 Index 是方法。@是固定格式
## 就是说,在浏览器地址栏输入blog/test 就可直接代打开下面控制卡的内容 test123
在控制器中,要有个前台的控制器,也要有个后台的控制器,所以在Controllers 文件夹下创建一个Admin文件夹
blog/app/Http/Controllers/Admin/这是后台控制器有一个 IndexController.php
blog/app/Http/Controllers/Auth/这是网页前台控制器有 Controller.php 和 UserController.php 俩个
2.在blog\app\Http\Controllers\Admin\IndexController.php 后台控制器中
namespace App\Http\Controllers\Admin; //定义命名空间路径
use App\Http\Controllers\Controller; //继承自上一级目录Controller 文件夹下控制器
class IndexController extends Controller{
public function index(){
echo 'test123';}}
Artisan 方法创建控制器:CMD命令行下
php artisan make:controller HomeController
php artisan make:controller UserController
—闭包路由起名
先找路由 :blog/app/http/Controller/routes.php
写入: Route::get('user',['as'=>'profile',function(){
## 输出当前路由的地址,http://blog/user 打印 route('profile');
echo route('profile');
return '路由命名';
}]);
—控制器路由起名
先找路由 :blog/app/http/Controller/routes.php
##小伙子。看清楚。这里是as ... uses!!!! 不然找不到函数要不找不到方法
Route::get('test',['as'=>'profile','user'=>'Admin\IndexController@index']);
//as 表示路由的名称 uses 表示使用后面的路由里面的方法
还有一种命名的方法:
Route::get('test','Admin\IndexController@index')->name('profile');
还是打开route.php
##看清楚斜线的方向。我知道你又要报错。
Route::get('admin/login','Admin\IndexController@login');
Route::get('admin/index','Admin\IndexController@Index');
admin\IndexController.php
class IndexController extends Controller{
public function index(){
return view('welcome');
}
// public function index(){
// echo "bibaoluyou succ";
// // return view('welcome');
// }
public function login(){
return 'denglu';
}
}
这时候再在地址栏输入 blog/admin/login 出 denglu 。输入admin/index 欢迎界面 view('welcome');
上面这两个都是admin/login ,admin开头的路由单独分一个组:
Route::group(['prefix' => 'admin'], function() {
Route::get('login','Admin\IndexController@login');
Route::get('index','Admin\IndexController@Index');
});
去掉里面的admin/login,其他的没变,还有一个同样的,命名空间Admin也可以去掉
Route::group(['prefix' => 'admin','namespace'=>'Admin'], function() {
Route::get('login','IndexController@login');
Route::get('index','IndexController@Index');
});
**注意一下,get同理,as 和 uses**
前方插入artsan 命令,在CMD 下面装 X 用:
查看路由的详细情况: php artisan route:list
用这条命令的时候如果有方法不存在会报错如下:
[ReflectionException]
Class App\Http\Controllers\Admin\ArticleController does not exist
创建 artisan make:controller ArticleController
这个时候还要修改两个地方,ArticleController.php 里面
命名空间修改:namespace App\Http\Controllers\Admin;
use修改: use App\Http\Controllers\Controller;
App\Http\Controllers\Admin\ArticleController@store
从表中可以看出来,如果是用get方法或者head 方法,得到的就是index/create 如果是用的post 方法,得到的就是store 用之前的POSTMAN也可以在VIEW当中查看
简单说就是在这里面加了一层保护过滤
// middleware 就是中间件
Route::group(['prefix' => 'admin','namespace'=>'Admin','middleware'=>'web'], function() {
Route::get('login','IndexController@login');
Route::get('index','IndexController@Index');
});
—下面准备测试中间件
Route::get('/',function(){ //先访问首页
session(['key'=>123]); //把key 写入sessoin
return view('welcome');
});
Route::get('/test',function(){
echo session('key'); //提取session里面的值
return 'fail to get the key';
});
先访问blog 首页 再访问 blog/test 得到 fail to get the key.
问题出在 必须用了middleware 中间件才能使用web服务
读取竟然失败了!然后我们吧这两条放到middleware里面试试
##骚年。这个地方要注意下,prefix这里有个admin 所以访问首页的时候要先把admin加上
Route::group(['prefix' => 'admin','namespace'=>'Admin','middleware'=>'web'], function() {
Route::get('/',function(){ //先访问首页
session(['key'=>123]); //把key 写入sessoin
return view('welcome');
});
Route::get('/test',function(){
echo session('key'); //提取session里面的值
return 'fail to get the key';
});
Route::get('login','IndexController@login');
Route::get('index','IndexController@Index');
Route::resource('article', 'ArticleController');
});
访问首页之后再访问 blog/admin/test 可以得到 123 fail...
但是!我们被视频坑了!!!
因为下面居然有已经定义好的空白的中间件!
于是:
//因为加入中间件,把上session 实验的的内容放到这
Route::group(['middleware' => ['web']], function () {
Route::get('/',function(){ //先访问首页
session(['key'=>123]); //把key 写入sessoin
return view('welcome');
});
Route::get('/test',function(){
echo session('key'); //提取session里面的值
return 'fail to get the key';
});
});
直接访问首页让后再访问test也可以得到结果。
中间件的定义在隔壁的kernel.php 里面 写一个试试
//这里app\是命名空间 //这是中间件的名字比如'middlware'
'admin.login' => \App\Http\Middleware\AdminLogin::class,
查artisan 所有的命令: php artisan
D:\wamp64\www\code\blog>php artisan
Laravel Framework version 5.2.23
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:
clear-compiled Remove the compiled class file
down Put the application into maintenance mode
env Display the current framework environment
help Displays help for a command
list Lists commands
migrate Run the database migrations
optimize Optimize the framework for better performance
serve Serve the application on the PHP development server
tinker Interact with your application
up Bring the application out of maintenance mode
app
app:name Set the application namespace
auth
auth:clear-resets Flush expired password reset tokens
cache
cache:clear Flush the application cache
cache:table Create a migration for the cache database table
config
config:cache Create a cache file for faster configuration loading
config:clear Remove the configuration cache file
db
db:seed Seed the database with records
event
event:generate Generate the missing events and listeners based on registration
key
key:generate Set the application key
make
make:auth Scaffold basic login and registration views and routes
make:console Create a new Artisan command
make:controller Create a new controller class
make:event Create a new event class
make:job Create a new job class
make:listener Create a new event listener class
make:middleware Create a new middleware class
make:migration Create a new migration file
make:model Create a new Eloquent model 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:seeder Create a new seeder class
make:test Create a new test class
migrate
migrate:install Create the migration repository
migrate:refresh Reset and re-run all migrations
migrate:reset Rollback all database migrations
migrate:rollback Rollback the last database migration
migrate:status Show the status of each migration
queue
queue:failed List all of the failed queue jobs
queue:failed-table Create a migration for the failed queue jobs database table
queue:flush Flush all of the failed queue jobs
queue:forget Delete a failed queue job
queue:listen Listen to a given queue
queue:restart Restart queue worker daemons after their current job
queue:retry Retry a failed queue job
queue:table Create a migration for the queue jobs database table
queue:work Process the next job on a queue
route
route:cache Create a route cache file for faster route registration
route:clear Remove the route cache file
route:list List all registered routes
schedule
schedule:run Run the scheduled commands
session
session:table Create a migration for the session database table
vendor
vendor:publish Publish any publishable assets from vendor packages
view
view:clear Clear all compiled view files
可见创建一个中间件应该是用的 make:middleware 输入: php artisan make:middleware AdminLogin
简单说,命令的组成就是 php artisan 这个 命令头 信息 + 要弄啥 + 弄啥的名
—创建成功了,在middleware 文件夹 打开 AdminLogin.php
public function handle($request, Closure $next)
{
echo "create AdminLogin succ";exit; //这里写入 exit 之后,下面的欢迎页面就不执行了
return $next($request);
}
—在 route.php 里面直接添加 添加刚刚创建的admin.login
Route::group(['middleware' => ['web','admin.login']], function () {
Route::get('/',function(){ //先访问首页
session(['key'=>123]); //把key 写入sessoin
return view('welcome'); //这里有欢迎页面,但是上面已经用 exit; 退出了,所以欢迎页面不会显示
视图:处理结果的可视化
数据传递:1.with 2.传参 3.compact
打开route.php
通过路由调用控制器,通过控制器分配视图
Route::get('/',function(){ //视图化等同于 Route::get('/view',function(){
return view('welcome'); //新建测试页面 return view('test_laravel');
});
ps:新建测试页面,在 views 文件夹下,复制welcome.blade.php 更名 xxx.blade.php
blade是一个默认的模板引擎
新建一个 view 控制器
Route::get('view','ViewController@index');
CMD : php artisan make:Controller ViewController
app\http\controllers\ViewController.php 中
public function index(){
return view('test_larvel');} //这就是调用视图
修改试图中的内容
比如现在要修改欢迎界面视图中的 larvel 5 字样:
在 ViewController.php 中
public function index(){
$name = '这就是修改的内容';
return view('test_laravel')->with('name',$name);}
在 test_laravel.php 中,把 laravel 5 字样换成 就可以完成调用
同理,在 public function index(){
$a = 'this is test';
return view('test_laravel')->with()->with('a'.$a);}
在 ViewController.php 中
用法总结
---1.写内容
##在文件中用数组形式写入内容(ViewController.php)
$data = [
'name'=>'这就是修改的内容';
'a'=>'this is test';
];
$titile = '这也是测试的一部分';
##注意返回值格式
return view('test_laravel',$data,$title);
##或者用 compact
return view('test_laravel',compact('data','title'));
---2.引参数
test_laravel.blade.php 中 **数组内容** 就用 **数组方式** 调用
-
非数组就直接调用
刚刚的输出页面 test_laravel.blade.php 中
等于=>写法 {{$data}}
如果有两个参数,但只要解析一个,另外一个前面就用@
{{$data}} @{{$data}}
// @符号屏蔽语法解析
如要测试定义的参数存在(用isset?($变量名)),就解析$变量名,不存在:,就打印默认值
{{isset($data)?$data:'默认值'}}
输出页面中,如果是要输出一个定义过的变量比如 :
$str = '