读一读

将域名泛解析到指定的主机后,可以通过IIS接受所有的泛解析域名并让程序做相应的处理。接收泛解析域名的所有二级域名,只需要在绑定域名(主机头)的时候留空就行了,目录正常指向你的网站目录。

blob.png


Laravel接收,解析url获取二级域名,做相应的处理

Route::get('/', 'Admin\IndexController@CheckUrlType');

public function CheckUrlType(Request $request)
{
    //改成获取前缀
    $url = $request->url();
    $strat = 7;//  http://
    $end = strpos($url,'.');
    $name = substr($url,$strat, $end - $strat);

    if($name == 'dl') return redirect('admin/index');//主网站的二级

    //处理映射情况 --自定义的高级用户名
    $map = MapName::where('from_name',$name)->first();
    if(!empty($map))
    {
        //修改为映射到的实际用户名
        $name = $map->to_name;
    }

    $checkUser = AdminUser::where('name',$name)->first();
    if(empty($checkUser) || !$checkUser->hasRole()){
        dd('该二维码不存在');
    }

    $id = $checkUser->id;//每个用户的二级域名就是它的用户名,通过用户名获取对应的类容
    return view('admin/bagent/registerview',compact('id'));
}


这样子,就可以实现像一些博客网站那样,用你的用户名做二级域名访问后,是专属于你的内容,这样的功能了


laravel有着强大的"数据库操作模型",其中有find和get等的总结方法获取数据

但是注意的是find返回的是单行对应的模型,如果数据不存在就会为null,所以用isset判断

而get是赛选where等获取的数据,是一个Collect集合,就算没有数据,也是一个空的集合,不能用isset判断,用count(*)===0判断为空


控制器中可以通过注入的Request对象获取到Session对象,再调用它的方法。

$session = $request->session();
$session->get(key);//获取某个值
$session->all();//方法获取全部session
$session->has(key);//判断是否存在。
$session->put(key,value);//存储数据。
$session->pull();//获取并删除
$session->forget(key);//删除指定数据
$session->flush();//删除所有session数据。
$session->flash(key,value);//设置一次性数据
$session->reflash();//保留一次性数据到下一次
$session->keep();//保存数据下来

除了通过Rrquest对象获取session,还可以直接引入Session类,使用Session::方法使用session功能。

还可以使用辅助函数session(key)直接获取session,sesseion(['key'=>'value'])添加session。


$res = DB::table('user')->paginate(20);
$res->total();//总的条数
$res->firstItem();//第一个元素
$res->lastItem();//最后一个元素
$res->lastPage();//最后一页

使用simplePaginate()分页时是没有total和lastPage的


首先,在IIS下载一个Web平台安装程序,这是一个管理应用包的利器,就像conposer等,安装网上的组件。再去平台安装程序里下载安装PHP7.0你需要的版本和url重写2.0。php的模块映射会自动完成的,当然还有环境变量。新建网站指向laravel的public目录。打开网页,一片空白,好吧-应该是权限问题。设置下载的php目录(C:\Program Files\iis express\PHP\v7.0),laravel项目的目录,添加两个用户读取执行权限IUSR和IIS_IUSRS。为需要写入的目录(laravel的storage和C:/temp)添加IUSR和IIS_IUSRS的写入权限。注意的是,添加网站的时候记得修改php的版本哟,不要一片空白你怪谁。

对了设置php配置文件php.ini的display_errors = On,显示提示错误信息,我这里下载之后默认是Off的。网站的Debug开启,有报错了之后,一切就好解决了。


当你有那么一个操作是两个where再后面一个orWhere时,你会发现其实这三者的关系是(where and where) or where。其实你的目的是想where (where or where),当时结果却不是你想的,所以要用括号括起来。

$noteList = $noteList->where('relate_id',$targetNotebook);
$noteList = $noteList->where(function($query) use ($search){
                $query->where('title','like',"%$search%")->orWhere('content','like',"%$search%");
            });

这是只要在路由组中指定中间件,请求就会自动先经过中间件

Route::group(['middleware'=>'test'],function)

除了可以指定中间件,还可以指定控制器的命名空间namespace

domain指定子域名  当然要在hosts绑定

prefix前缀,可以用在同一模块的


Route::get('loadexcel',function(){
    $res = [];
    Excel::load('1.xls', function($reader) use( &$res ) {
        $reader = $reader->getSheet(0);//得到Excel的第一个sheet
        $res = $reader->toArray();//转换为数组,0就是第一行(标题),二维数组
    });
    
    foreach ($res as $key=>$data){
        if($key == 0){
            continue;//0是标题呀
        }
        
        //去取出需要的数据
        $time = $data[0];
        $dingdan = $data[1];
        $money = $data[4];
        $userid =  json_decode($data[9])->userid;

        $gold = 0;
        switch ($money){
            case 10:
                $gold = 90000;
                break;
            case 50:
                $gold = 460000;
                break;
            case 100:
                $gold = 950000;
                break;
            case 500:
                $gold = 4900000;
        }

        $sql = "call AddLog('游戏服务器充值成功','operator',$userid,0,'$dingdan',0,0,$money,0,0,0,$gold,0,'$time',0,1)";
        DB::select($sql);
    }
    return "导入成功";
});



使用prism.js插件来做代码高亮

//引入文件
<link rel="stylesheet" href="{{asset('prism/prism.css')}}">
<script type="text/javascript" src="{{asset('prism/prism.js')}}"></script> //在文本的最后面引入

因为prism.js和ueditor生成的代码结构不一样,paism.js的高亮结构是

<pre><code class="language-css">p { color: red }</code></pre>//类名为language-语言

而ueditor的代码结构是:

<pre class="brush:css">p { color: red }</pre>//类名为brush:语言

所以,需要修改一下代码结构

//修改笔记中代码的结构 高亮
$(function(){
    $("pre").each(function(){
        //获取到自己的内容和类名
        var content = $(this).html();
        $(this).html("");//清空自己的内容
        var cla = $(this).attr("class");
        var newcla = "";
        if(cla != null){
            newcla = cla.replace("brush:","language-");
        }
        var newNode = "<code class='"+ newcla + "'>" + content + "</code>";
        $(this).append(newNode);
    });
});

这样就大功告成了


当报路由不存在时或404错误时,可以检查一下路由是不是真的不存在,如果路由存在,控制器方法等等都没有问题。这时候可以考虑是路由缓存的问题了,以前的路由缓存中,没有新加的路由!!!运行

php artisan route:clear