Laravel5学习

[1]缓存问题

  laravel中使用的配置文件,都会放在config目录下面,当变更某个参数的时候,如果发现不生效,可以在命令行下面执行  php artisan config:clear 命令才清除缓存

[2]composer 安装

#php -r "readfile('https://getcomposer.org/installer');" | php //下载下来compser.phar

如果上述命令报错,无法下载composer.phpar,可以使用如下命令

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === '48e3236262b34d30969dca3c37281b3b4bbe3221bda826ac6a9a62d6444cdb0dcd0615698a5cbe587c3f0fe57a54d8f5') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"

下载后,移动composer.phpar到环境变量目录下

#mv composer.phar /usr/local/bin/composer  //移动到环境变量目录下

[3]laravel 创建一个项目 

  composer create-project laravel/laravel security(项目名称,自定义),安装完成后,就会生成目录的文件

#composercreate-projectlaravel/laravel=5.4.30ac--prefer-dist//  下载指定版本的laravel,查看最新版本查看https://packagist.org/

[4]使用migration创建数据库表

  首先需要在.env文件配置好数据库链接,然后在命令行下执行如下命令

#php artisan make:migration create_users_table --create=users
Created Migration: 2017_08_03_064811_create_users1_table

执行完命令后,会在/database/migrations/目录下生成一个数据库迁移的文件,编辑该文件,发现,该文件中有两个方法,

up()方法是用户创建数据表的,在这个方法里面可以添加需要使用的数据库字段,down()方法用于回滚或者删除数据表

使用php artisan tinker模拟数据库操作如下

(1)先执行php artisan make:model Config -m 添加-m参数可以在生成model的同时创建出migration文件

(2)编辑migration文件,添加如下字段

写表字段的时候有很多修饰符,比如给某个字段添加注释

$table->string('username')->comment('用户姓名');

参考链接:https://d.laravel-china.org/docs/5.4/migrations#column-modifiers

表结构创建完成后,就可以执行 php artisan migrage了,执行完成后,数据库表就创建好了

注意,在Config.php文件下 添加如下行,否则无法插入数据库数据

laravel migrate 指定文件:

当使用 php artisan make:migration create_test_table后,如果仅仅想执行该文件,可以在 database/migrations 下创建一个文件夹,名字任意,以test为例

将上述文件拷贝到test为文件夹下,执行如下操作

php artisan migrate --path=database/migrations/test

这样就可以迁移该文件了

(3)实例化一个config类,然后操作如下

查看数据库数据更新如下;

[4]laravel 更新表字段(添加,更新,删除等)

  laravel中更新字段,应该使用php artisan make:migration alert_scan_git_table --table scan_git

创建完成后,修改该文件,使用Schema的table方法修改表字段,如下所示

 也可以采用一个笨方法,直接在数据库中删除该表,然后修改原有的migration文件(带有create方法的文件),修改完成后,执行migrate会提示 Noting to migrate

这是因为laravel针对每次迁移都会在当前数据库下的migrations表中插入一条记录,用于记录当前文件已经迁移过,所以,在migrations表里面,将该文件的迁移记录删除,然后再执行

php artisan migrate就可以了

参考链接: https://d.laravel-china.org/docs/5.1/migrations

[5]laravel Eloquent查询删除数据

1>删除数据

$flight = AppFlight::find(1); //根据主键id查找
$flight->delete();

或者

$flight = AppFlight::where('id','=','1122'); //根据条件查找
$flight->delete();

[6]laravel中执行系统命令

(1)安装依赖包 composer require symfony/process

(2)

use SymfonyComponentProcessProcess;
use SymfonyComponentProcessExceptionProcessFailedException;

$process = new Process('ls -lsa');
$process->run();

// executes after the command finishes
if (!$process->isSuccessful()) {
    throw new ProcessFailedException($process);
}

return $process->getOutput();

 参考链接:http://symfony.com/doc/current/components/process.html

【7】laravel  路由问题

1)laravel注册路由的时候可以选择,get或者post方式类似于如下这种

Route::get('/home', 'HomeController@index');
Route::post('/user/add', 'UserController@postAdd');
如果想要注册同时支持get和post的方法的路由,需要用到match函数,如下图
Route::match(['get','post'],'/home', 'HomeController@index');
2)注册路由的时候可以选择添加变量,比如删除用户,需要带有用户id参数,比如
Route::get('/user/del/{id}');也可以添加多个变量,比如
Route::get('/user/{action}/{id}','UserController@action');
在控制器中,编写action函数的时候,将这两个参数传进去就好,如果id参数是可选的,
也就是发送get请求的时候,有时候带id参数,有时候不带这个参数,那么可以在注册路由的时候函数就可以这么写,参数id后面跟上一个问号即可,控制器里面的函数传参数的时候
指定$id=null 即可
Route::get('/user/{action}/{id?}','UserController@action');
class UserController extends Controll
public function action($action,$id=null)
{
  do something();
}
【8】在js中输入汉字的时候,有时候弹窗的话,会有乱码的情况出现,添加如下语句即可

header("Content-Type:text/html;charset=utf-8");

【9】在routes/web.php文件中注册路由,后端函数如何判断当前请求是post或者get?使用如下方法判断
public function test(Request $r)
{
  if($r->isMethod('get'))
  {do something()}
}
【10】获取post请求参数

public function test(Request $r)
{$name = $r->input('name');}

【11】laravel中使用富文本编辑器,选用百度开源的UEditor,使用方法如下

1)配置composer.json文件,在composer.json文件的require 里面加入 
  "stevenyangecho/laravel-u-editor": "~1.4"
  在命令行里面运行composer update
  不出意外的话,就会在下载富文本编辑器所需要的文件

2)执行完update以后在config/app.php中配置如下

  providers配置
  StevenyangechoUEditorUEditorServiceProvider::class
  alias配置
  'UEditor'=>StevenyangechoUEditorUEditorServiceProvider::class

3)注册命令行接口
  php artisan vendor:publish

到此laravel-u-editor 富文本编辑器就安装好了,可以去项目config目录下看是否成成UEditorUpload.php这个文件,这个是富文本编辑器的配置文件,可以配置文件上传路径等。

4)使用编辑器

在需要使用编辑器的地方加入如下代码

<div id="ueditor" class="edui-default">
@include('UEditor::head')
</div>

加入js文件,在视图的最后加入如下代码

<script id="ueditor"></script>
<script>
var ue=UE.getEditor("ueditor");
ue.ready(function(){
//因为Laravel有防csrf防伪造攻击的处理所以加上此行
ue.execCommand('serverparam','_token','{{ csrf_token() }}');
});
</script>

  

5)上传图片配置
  

config/UEditorUpload.php 配置
"imagePathFormat" => "/uploads/{yyyy}{mm}{dd}/{time}{rand:6}"
  imagePathFormat定义了上传图片的路径,在public目录下创建uploads目录,保证该目录对php用户可写,按照上述方法配置即可

 /* 列出指定目录下的文件 */
        "fileManagerActionName" => "listfile", /* 执行文件管理的action名称 */
        "fileManagerListPath" => "/uploads", /* 指定要列出文件的目录 */

/* 列出指定目录下的图片 */
        "imageManagerActionName" => "listimage", /* 执行图片管理的action名称 */
        "imageManagerListPath" => "/uploads/", /* 指定要列出图片的目录 */

【12】laravel中表单验证的用法

当我们用到的form中有要提交的表单需要验证时,比如是不是合法的数字,合法的email,数字是不是介于某两个数字中间等等 ,larave中提供了两个方法

1)创建request文件

命令行下执行 php artisan make:request CreateJobRequest

执行完成后,打开laravel项目 http/app/Requests/目录下即可看到刚才创建的request文件

在该文件中,第一个函数 authorize用于验证用户权限,A用户不能操作B用户的表单,暂时用不到的,可以将函数内容修改为

rules()函数用户校验各个字段需要的条件 

如上图所示,规则写好,如何引用这个request文件呢?

在控制器中,在要添加的函数中,

public function postedit(RequestsCreateNewScanTaskRequest $request)

{
    //接收post过来的数据,并校验,如果request数据没有通过校验
    //函数不会执行到里面来
}

当用户提交的表单不符合我们设定的规则时,需要友好的给出提示,提示用户哪里填写的不对,这时候就可以用如下代码展示出来

<h1>创建文章</h1>

@if (count($errors) > 0)
    <div class="alert alert-danger">
        <ul>
            @foreach ($errors->all() as $error)
                <li>{{ $error }}</li>
            @endforeach
        </ul>
    </div>
@endif

<!-- 创建文章表单 -->

根据上面的代码配置上以后,发现很多提示都是英文的,如果想改成中文的提示可修改如下文件:

/resources/lang/en/validation.php文件,可以修改对应的提示信息

方法2)

最简单的表单验证的方法就是在控制器的函数中利用validate,

public function postdetail(Request $r)
    {
        $this->validate($r,['status'=>['required',Rule::in(['2','3'])]]);
     //要求status字段在2和3中间选择,其他的数据都不被允许
    //如果用户提交的数据不满足上述的条件,下面的代码将不被执行
}

参考链接:https://d.laravel-china.org/docs/5.4/validation#available-validation-rules

【13】larave中闭包函数传参(函数里面的函数)

使用use关键字,看下Controller中的一个函数

public function getnotice($id)
    {
        $vul = 111
         Mail::send('mail.vul',['level'=>222],function ($message) use($vul){
            $message->to($vul);
            $message->subject('test subject');
        });
    }

函数getnotice里面,还有一个闭包函数 function($message)

当 function($message)这个函数里面,想用$vul变量时,发现报错,提示该变量未定义

加上use($vul) 即可使用

【laravel中执行定时任务】

laravel中的定时任务依赖于系统级别的crontab,首先需要在系统里面添加一个php artisan的定时任务

#crontab -e 添加如下代码

* * * * * /usr/bin/php /laravel-project-dir/artisan schedule:run >>/dev/null 2>&1

//每分钟执行一次php artisan命令,然后artisan去调用laravel中添加的定时任务

然后 打开 AppConsoleKernel.php文件,示例代码如下

protected function schedule(Schedule $schedule)
    {
        $schedule->call(function (){
            Log::info("test laravel schedule");
        })->everyMinute();
    }

//Log::info打印日志到 storage/laravel.log文件  每分钟执行一次  

然后查看storage/laravel.log 即可看到每分钟打印的日志

【重新生成应用的key】

phpartisankey:generate

【添加验证码】

参考资料:https://laravel-china.org/topics/2895/extension-recommended-mewscaptcha-image-authentication-code-solution
1.composer.json添加"mews/captcha":"^2.1"
2.composerupdate
3.config/app.php添加provider和alias
MewsCaptchaCaptchaServiceProvider::class,
'Captcha'=>MewsCaptchaFacadesCaptcha::class,
4.phpartisanvendor:publish
5.配置config/captcha.php文件

【添加ldap认证模块】

composer require adldap2/adldap2-laravel

【laravel 启用认证登录功能】

php artisan make:auth

【重构认证功能】

http://laravelacademy.org/post/5417.html
https://segmentfault.com/q/1010000004227038

登录时密码比对方法修改
IlluminateAuthEloquentUserProvidervalidateCredentials函数
$plain=$credentials['password'];
$crypter=newCrypter('mljr_salt_RhbTgbJ02Lsk');
$encrypted=$crypter->encrypt($plain);
$encrypt_plain=strtoupper(bin2hex($encrypted));
if($encrypt_plain==$user->getAuthPassword())
{
returntrue;
}
else{returnfalse;}

注册时创建用户密码加密方法修改
apphttpcontrollerauth egistercontrollercreate函数

重置密码时的密码加密方法
IlluminateFoundationAuthResetPasswords.phpresetPassword函数

【加载自己写的类 功能】

https://blog.csdn.net/liukai6/article/details/78580913

【laravel下Carbon用法】

https://9iphp.com/web/laravel/php-datetime-package-carbon.html

【laravel 定时任务】 

1. php artisan make:command PwdCheck

打开 appconsoleCommandsPwdCheck.php,在这个文件里面定义自己的业务逻辑,想要完成的功能,其中signature定义的名字是要用到的

 

2.打开appconsoleKernel.php文件,定义好 $commands和schedule

3.在系统里面添加crontab

crontab -e,添加如下行

* * * * * /usr/bin/php /opt/laravel/artisan schedule:run >> /dev/null 2>&1

参考资料

https://www.cnblogs.com/xxoome/p/6092961.html
https://blog.csdn.net/a_new_steven/article/details/73733087

原文地址:https://www.cnblogs.com/Kevin-1967/p/7269218.html