阅读更多
composer使用国内镜像
composer config -g repo.packagist composer https://packagist.phpcomposer.com
composer
默认安装最新版本,如想安装指定版本,在其后追加指定的版本号即可。可以cd进入我们需要创建的项目所在的www根目录站点,cd切换到www文件夹下后。-vvv显示debug信息
composer -vvv create-project laravel/laravel=5.2.* --prefer-dist project
下载镜像优化版:基于Laravel 官方 GitHub 仓库源码的基础上安装了依赖库(vendor),页面打开巨慢的问题我们把所有引用的google字体全部删掉了等。
http://laravelacademy.org/resources-download
查看框架的版本号
vendor\laravel\framework\src\Illuminate\Foundation\Application.php
初始化配置
应用key
接下来要做的事情就是将应用的 key(APP_KEY)设置为一个随机字符串,如果你是通过 Composer 或者 Laravel 安装器安装的话,该 key 的值已经通过 php artisan key:generate
命令生成好了。通常,该字符串应该是 32 位长,通过 .env
文件中的 APP_KEY
进行配置,如果你还没有将 .env.example
文件重命名为 .env
,现在立即这样做。如果应用 key 没有被设置,用户 Session 和其它加密数据将会有安全隐患!
运行php artisan key:generate前提是你有个.env文件.然后把根路径下的.env.example的内容复制进去,再运行
php artisan key:generate
查看帮助artisan
php artisan help make:controller
目录权限
安装完 Laravel 后,需要配置一些目录的读写权限
chmod -R 777 bootstrap/cache
chmod -R 777 storage
开启错误日志:.env 打开 debug,在app/storage/logs/laravel.log中找到具体错误
其他配置
打开 config/app.php文件 优化以下配置参数
'timezone' => env('TIME_ZONE', 'Asia/Shanghai'),
'log' => env('APP_LOG', 'daily'),
'log_level' => env('APP_LOG_LEVEL', 'debug'),
'locale' => 'zh',
'env' => env('APP_ENV', 'production')
优化 laravel 配置,编辑 composer.json在post-update-cmd 数组里面写入优化的优化参数
"php artisan cache:clear",
"php artisan route:cache",
"php artisan optimize",
"php artisan ide-helper:generate",
"php artisan ide-helper:meta",
"composer dumpautoload",
"php artisan clear-compiled"
我们说说Laravel中Model,Controller,Views的工作流程,也就是下面这个顺序:
1.注册路由 ---> 2.创建控制器 ---> 3. 控制器中获取数据库数据 ---> 4.在视图中展示数据
1注册路由
你可以在 app/Http/routes.php 文件中定义应用程序的大多数路由
Route::any('/', 'ArticleController@index'); //首页
Route::get('articles/{id}', 'ArticleController@show'); //get路由
Route::post('article/update', 'ArticleController@update'); //post路由
Route::resource('photo', 'PhotoController'); //restful
可以直接使用这个路由,也可以由文件App\Providers\RouteServiceProvider类自定义
/**
* Define the routes for the application.
*
* @return void
*/
public function map()
{
$this->mapApiRoutes();
$this->mapWebRoutes();
}
/**
* Define the "web" routes for the application.
*
* These routes all receive session state, CSRF protection, etc.
*
* @return void
*/
protected function mapWebRoutes()
{
Route::middleware('web')
->namespace($this->namespace)
->group(base_path('routes/web.php'));
}
/**
* Define the "api" routes for the application.
*
* These routes are typically stateless.
*
* @return void
*/
protected function mapApiRoutes()
{
Route::prefix('api')
->middleware('api')
->namespace($this->namespace)
->group(base_path('routes/api.php'));
}
2创建控制器
创建控制器的时候你可以手动创建,不过还是推荐使用artisan这个命令行工具,在项目目录之下(项目中的artisan文件对应的目录),命令行执行:
php artisan make:controller ArticleController
//php artisan make:controller PhotoController --resource //5.2 restful
这里需要说明的是--
resource需要生成一堆如show()
,create()
等方法。
3控制器中获取数据库数据
创建模型,首先我们要新建一张表来存储 Article,命令行运行
php artisan make:model Models/Article
成功以后,先创建migration
php artisan make:migration create_articles_table --create=articles
修改 migration 文件database/migrations/***_create_articles_table.php 然后在up方法里添加字段信息:
Schema::create('articles', function(Blueprint $table)
{
$table->increments('id');
$table->string('url')->comment('回调通知地址');
$table->integer('times')->default(0)->index()->comment('通知次数');
$table->string('params')->comment('通知参数');
$table->tinyInteger('is_success')->default(0)->index()->comment('是否通知成功');
$table->timestamps();
});
之后运行migrate命令生成数据库表:
php artisan migrate
在laravel框架ORM模型中默认会有三个时间字段,created_at,updated_at,deleted_at,这三个时间字段是框架默认操作,不用另加代码去处理,非赏方便:ORM模型会自动添加上create_at字段但写入当前时间,而不用我们自己去添加这个字段,在修改时会加上updated_at,默认情况下,Eloquent期望created_at和updated_at已经存在于数据表中,如果你不想要这些Laravel自动管理的列,在模型类中设置$timestamps属性为false.当使用软删除时,框架不会直接删除数据库里的数据,而是直接写deleted_at指定当前删除时间.如果我们想修改这三个字段的名称可以在对应的MODEL类中添加以下代码
const DELETED_AT='delete_at';
const UPDATED_AT='update_at';
const CREATED_AT = 'create_at';
去数据库里瞧瞧,articles 表已经躺在那儿啦。模型中加入
然后再调用模型
class ArticleController extends Controller
{
public function index()
{
$articles = Article::where("status", 1)->get();
return $articles;
}
}
如果你直接返回查找到得数据,因为laravel可能是出于这样的考虑:一般这种情况下地返回,通常都是在创建api功能,比如你为你的一个手机App写的api一样,json数据无疑是很好的选择
在视图中展示数据
这里我们首先需要修改的是ArticleController
中的index()
方法:
validate
use Illuminate\Validation\Rule;
use Illuminate\Support\Facades\Validator;
class ArticleController extends Controller
{
/**
* 显示列表数据
*
* @param Request $request
* @return Response
*/
public function index(Request $request)
{
$articles = Article::orderBy('create_time', 'desc')->paginate();
return view('articles.index', compact('articles'));
}
public function add(Request $request) {
if ($request->isMethod('post')) {
$this->validate($request, [
'name' => 'required',
'card' => 'required|unique:user_bank_cards', //银行卡必填且唯一
]);
$article = Article::create([
'name' => $request->input('name'),
'moblie' => $request->input('moblie'),
]);
return redirect("/article/index");
}
return view('articles.add', compact('articles'));
}
/**
* Update the specified article.
*
* @param Request $request
* @param int $id 路由参数传入的输入数据,只需要将路由参数置于其他依赖之后
* @return Response
*/
public function update(Request $request, $id)
{
//$row = Acticle::select(['id,name'])->where('name', 'zhangsan')->first();
//$field = Acticle::where('name', 'zhangsan')->pluck('name');
$article = Article::findOrFail($id);
Validator::make($request->all(), [
'name' => [
'required',
Rule::unique('articles')->ignore($id),
],
]);
$article->name = $request->input('name');
$article->save();
return redirect("/article/index");
}
}
我们只是修改了return这一行的代码,使用view()
方法加载视图,这个视图就是位于resources/views/articles/
中的index.blade.php(
用的是blade模板引擎)
,最后使用compact('articles')
将数据传给视图文件。
@foreach ($articles as $info)
{{ $info->name }}
{{ route('article.edit',$info->id) }}
@endforeach
{{ $articles->links() }}
如果要添加错误信息
$validate = Validator::make($input, $rule, $message);
//$errors = $validator->errors();
//$validate->errors()->add('key','error message'); //方法1
//return \Redirect::back()->withErrors("密码错误"); //方法2
if (!$validate->passes()) {
return back()->withErrors($validate);
}
laravel项目下面有4个文件夹:
app
、
bootstrap
、
public
、
vendor
,这4个文件夹下面又有很多个子文件夹,当你第一次看到这么丰富的文件夹内容时,是不是觉得很有压力?没关系,我们会逐一的来了解不同的文件夹。
-
app
包含了站点的controllers(控制器),models(模型),views(视图)和assets(资源)。这些是网站运行的主要代码,你会将你大部分的时间花在这个目录里。
-
bootstrap
用来存放系统启动时需要的文件,这些文件会被如index.php这样的文件调用。
-
public
这个文件夹是唯一外界可以看到的web服务器的目录。它含有laravel框架核心的引导文件index.php,这个目录也可用来存放任何可以公开的静态资源,如css,Javascript,images等
-
vender
包含Composer命令相关管理文件,包含了许多PHP相关的app应用程序
laravel5.3 获取sql.打开AppServiceProvider在boot方法中添加如下代码:
\Illuminate\Database\Query\Builder::macro('sql', function () {
$bindings = $this->getBindings();
$sql = str_replace('?',"'%s'",$this->toSql());
return vsprintf($sql, $bindings);
});
\Illuminate\Database\Eloquent\Builder::macro('sql', function(){
return ($this->getQuery()->sql());
});
//dd(DB::table('user')->where('id', 1)->sql());
使用php artisan tinker, 其实我们可以轻易的做到调试Laravel。它帮助我们更轻松的和我们的应用交流,而无需再不停地使用 dd() 和 die() 。那种为了调试一段代码,通篇都是 print_r() 和 dd() 的痛苦,我想我们大部分人都能感同身受。
Laravel不同环境下 env 文件设置
在支持不同环境下env
文件设置,可以针对不同环境(dev, test, prod)设置env文件为:
development: .env.dev
staging: .env.test
production: .env.prod
根据不同环境服务器设置系统变量(可根据
phpinfo()
查看
APP_ENV
环境变量是否OK):
ServerName my.demo.com
SetEnv APP_ENV DEV
fastcgi_param APP_ENV DEV #nginx
这样,项目根目录下就会有根据不同环境对应的
.env.xxx
文件,放入版本控制,本地的环境对应
.env
不需要放入版本控制. env版本库忽略,在里面的配置信息不会泄露,安全
方法欺骗:让HTML表单实现RESTFUL
HTML表单没有支持 PUT 、PATCH 或 DELETE 请求。所以当定义 PUT 、PATCH 以及 DELETE 路由并在 HTML 表单中被调用的时候,您将需要添加隐藏 _method 字段在表单中。发送的 _method 字段对应的值会被当做HTTP请求方法。举例来说:
Middleware是原来的路由filter的一个升级版,现在不用在filters.php里定义过滤器,取而代之的是在 Middleware目录中创建类,并在Kernel.php中配置全局还是可选,全局的Middleware在每个请求都会执行,而可选的就相当于原来的filter,可以在路由中使用,也可以在控制器中使用。
Laravel5常用的包 github.com
illuminate/html
nonfu/awesome-laravel //github Laravel精选资源大全
mccool/laravel-auto-presenter //MVP模式
swiggles/laravel-memcache //memcache扩展
Xethron/migrations-generator //从现有数据库生成表迁移,包括索引和外键!
nWidart/DbExporter //整个数据库生成迁移,包括数据
- 大小: 13.3 KB
- 大小: 56 KB
- Laravel_Cheatsheet.pdf.zip (137.5 KB)
- 下载次数: 1