• 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

  • 相关阅读:
    常用网站
    我的第一个 python 爬虫脚本
    在文件夹下所有文件中查找字符串(linux/windows)
    Python 列表 insert() 方法
    mysql 替换 tab 键 ( )
    访问权限的修饰符
    eclipse 快捷键
    位运算
    hadoop 环境搭建
    Hadoop 快速入门
  • 原文地址:https://www.cnblogs.com/Kevin-1967/p/7269218.html
Copyright © 2020-2023  润新知