作者归档:yank0362

Laravel视图composer传递数据到视图

  • 全局共享变量

    public function boot()
    {
        view()->share('tasks',Task::all());
    }
    

使用view()->share(),最好放在服务提供者的boot()方法中如:App\Providers\AppServiceProvider

  • 基于闭包的视图composer
        view()->composer('home',function($view){
            $view->with('tasks',Task::all());
        });

以上代码使用闭包的方式,将变量传递给指定的单个视图home表示resources/views/home.blade.php,如果要传给多个视图,可以使用[文件夹路径.*],或者将composer方法的第一个参数与成数组[‘xx.header’,’xx.footer’]

  • 基于类的视图composer

    <?php namespace App\Http\ViewComposers;
    
    use App\Task; use Illuminate\Contracts\View\View;
    
    class TasksComposer { private $tasks;
    
        public function __construct(Task $tasks)
        {
            $this->tasks = $tasks;
        }
    
        public function compose(View $view){
            $view->with('tasks',$this->tasks->all());
        }
    
    
    }
    

创建视图composer类TasksComposer,在boot()方法中使用view()->composer(‘home’,TasksComposer::class);代码,给对应的视图传递变量;

0

Vagrant/Homestead常用命令

$ vagrant init # 初始化

$ vagrant up # 启动虚拟机
$ vagrant halt # 关闭虚拟机
$ vagrant reload # 重启虚拟机
$ vagrant ssh # SSH 至虚拟机
$ vagrant suspend # 挂起虚拟机
$ vagrant resume # 唤醒虚拟机
$ vagrant status # 查看虚拟机运行状态
$ vagrant destroy # 销毁当前虚拟机

box管理命令

$ vagrant box list # 查看本地box列表
$ vagrant box add # 添加box到列表
$ vagrant box remove # 从box列表移除

0

面向对象设计原则

  • 单一职责(Single Responsibility Principle,SRP)

    分离职责太多的对象,规划好各自的职责范围,什么角色干什么事;

  • 接口隔离(Interface Segregatioon Principle,ISP)

    使用多个专门接口,代替臃肿的单个接口。因为单个胖接口,在类实现它的时候就必须实现它所有的方法,但有些方法对于这个类可能是完全没有用的;避免在需求发生修改的时候,去改动实现了它的所有类,实现这种胖接口,修改时牵一发动全身;

  • 开放-封闭(Open-Close Principle,OCP)

    模块易于扩展,而扩展不会影起很大的影响,就叫做对于扩展开放,对于修改封闭,其实比较难于理解

  • 里氏替换(Liskov Substitution Principle,LSP)

    子类必须能够替换成它们的基类,并出现在父类能够出现的任何地方,替换原则是主要针对继承的设计原则,父类的方法都要在子类中实现或重写,并且派生类只实现其抽象类中声明的方法。我个人的理解就是,子类和父类的方法需要有高度的一致性

  • 依赖倒置(Dependence Inversion Principle,DIP)

    上层模块不应依赖于下层模块,它们共同依赖于一个抽象(父类不能依赖子类,它们都要依赖抽象类)。抽象不能依赖具体,具体要依赖于现象。IOC控制反转和DIP依赖倒置是同义词。

0

php中的错误级别

warning => 警告级别的错误,级别较高的错误,会导致是不到预期的结果。

notice => 通知级别的错误,不影响正常流程。

deprecated => 不推荐、不建议,最低级别的错误,比如使用一些过期的函数会触发这个级别错误,虽然不影响正常流程,但一般还是建议修正。

fetal error =>致命错误!!!想想就害怕!!直接导致流程中止!!非改不可!!

parse error => 语法解析错误!!一般IDE会报出来的,也是非改不可!

这几个是PHP常见级别的错误,其它的要是查手册,据说有16个级别的,呵呵哒~

0

php为什么不能像java一样使用try catch解决异常问题

在一些面向对像的编程语言当中,使用try catch语句可以很好的捕获异常。为什么php中却很多时候捕获不了“异常”?原因其实是PHP遇到任何自身错误都会触发一个错误,而不是抛出异常(也可能同时抛出)。如果想使用异常处理不可预料的问题是不行的。也就是说,你用try catch包裹着的代码有可能抛出的是一个错误是Error,而不是一个Exception,所以try也是白try!

之前有一个从C#转php的同事看到了代码当中有很多throw,他很不解为什么要手动抛出异常。PHP只有你主动throw后,才能捕获异常(也有一些异常是可以自动捕获)。

异常处理机制可以把每一件事情当作事务考虑,还可以把异常看成一种内建的恢复系统。如果程序某部分失败,异常将恢复到某个已知的稳定的点上;

例如:针对一个除零问题,java属于ArithmeticException,会对其实施抓捕,而PHP则不会;java里异常是唯一的错误报告方式; 在php中将多个相关关联不可拆分的操作封闭在一个try catch块当中可以减小数据不一致的问题,可以在catch语句块当中,做一些补救措施:

<br />try {
    if(文件不传不成功) throw(上传异常);
    if(入库失败) throw (db操作异常);
}catch (异常){
    //补救...删队文件或者删除记录等
}
0

冒个泡

刚才在群里跟同事聊天,讲了一些关于面试啊什么的,同事说,如果现在让他盲写冒泡排序都写不出来。于是,测试一下自己,顺便理一下思路~

$nums = [1,9,10,2,3,4,8,5,6,7];

    //冒泡的算法思路,小数往前,大数往后,交换
    /**
     * 1=> 1,9,2,3,4,8,5,6,7,10    确定最后一位
     * 2=> 1,2,3,4,8,5,6,7,9,10    确定最后两位
     * 3=> 1,2,3,4,5,6,7,8,9,10    确定最后三位
     * 4=> 1,2,3,4,5,6,7,8,9,10    确定最后四位
     * ....                        确定最后n-1位
     */

    $len = sizeof($nums);

    for ($i=0;$i<$len-2;$i++){
        for ($j=0;$j<($len-$i-1);$j++){
            $tmp = 0;
            if($nums[$j]>$nums[$j+1]){
                $tmp = $nums[$j];
                $nums[$j] = $nums[$j+1];
                $nums[$j+1] = $tmp;
            }
        }
    }


    print_r($nums);

0

php创建图像

    $height = 200;
    $weight = 200;

    $im = imagecreatetruecolor($weight,$height);//创建真彩色背景
    $white = imagecolorallocate($im,255,255,255);//颜色分配
    $blue = imagecolorallocate($im,0,0,64);//颜色分配

    imagefill($im,0,0,$blue);//背景填色
    imageline($im,0,0,$weight,$height,$white);//在背景上画线
    imagestring($im,4,50,150,'Sales',$white);//在背景上写字

    header('Content-type:image/png');//设置输出类型
    //imagepng($im);//输出图片
    imagepng($im,'img.png');//输出到文件
    imagedestroy($im);//销毁标识符
0

php ftp使用被动模式

$source = fopen("source.txt","r");

$conn = ftp_connect("192.168.x.xx") or die("Could not connect");
ftp_login($conn,"user","password");
ftp_pasv($conn, true);//被动模式
echo ftp_fput($conn,"target.txt",$source,FTP_ASCII);

ftp_close($conn);

坑点:
在centos上安装好vsftpd在系统当中访问成功,在资源管理器中可以上传下载,通过php方式访问需要使用被动模式,否则一直没有响应,报错无法连接

0