胜博发官网在Laravel5.2中,如何直接使用Auth包里的方法进行直接注册用户呢?

( 胜博发官网 )

有些场景下,我不需要使用表单来提交数据进行用户注册,我需要直接在控制器里进行注册,我调用下面的方法。

\Illuminate\Foundation\Auth\RegistersUsers::postRegister($data);

我直接调用这个方法,会提示错误。

Non-static method Illuminate\Foundation\Auth\RegistersUsers::postRegister() should not be called statically, assuming $this from incompatible context

其实我想知道的是。Laravel 提供了一个 方法用于验证用户登录

Auth::attempt(['email' => $email, 'password' => $password])

有没有类似的方法,我传入用户信息后直接注册成为会员呢?

首先,你调用方法的对象不是类(class),是特性(trait),不能直接调用,去看源代码。
其次,你调用的方法不是静态方法(static),不能如此(::)调用。
最后,Laravel是通过php artisan make:auth命令生成的控制器AuthController来进行用户注册的,以下是摘自控制器里注册用户的方法。
(ty0716简单的答案也同样告诉了你在控制器里注册用户其实就是通过User模型,将用户信息保存到数据库而已,所以你可能想多了。除此之外,数据验证Validation还需要你自己去做。)

    /**
     * Create a new user instance after a valid registration.
     *
     * @param  array  $data
     * @return User
     */
    protected function create(array $data)
    {
        return User::create([
            'name' => $data['name'],
            'email' => $data['email'],
            'password' => bcrypt($data['password']),
        ]);
    }

Laravel 5.2中自带的make:auth生成的是通用方法,具体的需要根据自己的情况调整。一般来说是不能直接用的,因为数据库结构不同。建议自己写方法。

User::create(array(
    'name'     => 'your name',
    'username' => 'your_username',
    'email'    => 'name@domain.io',
    'password' => Hash::make('your_password'),
));

在需要登录的路由前加 Route::auth();

你看下
Route::auth();
文件路径 vendor/laravel/framework/src/Illuminate/Routing/Router.php 第346行
是不用在routes.php 中指定登录,注册的路由的

(看完/读完)这篇文章有何感想! 胜博发官网的分享…

胜博发php怎么记录用户下载了一个文件?

( 胜博发 )

类似用百度文库的时候,下载一个文件,这个文件需要1个下载券,当第一次下载的时候,就会扣掉1个下载券,当这个帐号再次下载这个文件的时候,就不会再扣下载券。

我想会有一个download_records表,和users表进行一对多关联,每下载一个文件,就往download_records表写入一条记录,像这样:

id   download_record  user_id
1    ...              123
2    ...              123

那么,这个download_record字段该记录什么东西呢,是这个文件的路径+文件名吗?还是其他什么东西呢?

你把账号 跟 下载文件建立一个关联表

思路:
不能使用直接下载,就是说下载的时候不给予解析。禁止 服务器地址/av.avi 这种下载。换成xxx.php?filename=av.avi这样去解析下载。然后在xxx.php写业务逻辑就好了

可以记录你的文件ID 如果你的文件有多种类型并保存多个地方 这个ID可以重复 再加一个type记录文件类型
文件类型跟ID加唯一限制

题主,你的下载的资源是不是后台上传的?后台上传的话应该是有ID的,你可以在资源下载表记录资源ID,用户ID,下载时间==,其他就根据项目需求去定咯

记录文件id

id    article_id    user_id   down_num   

下载时判断用户是否下载过,下载过就不扣积分,down_num是下载次数,当然也可以没下载一次增加一条记录,就不需要这个字段

我建议建立文件表用户表的多对多映射。
建一张表只记录文件id和用户id。
当然如果你希望在一定时间后下载到期,可以在增加一个时间戳字段

(看完/读完)这篇文章有何感想! 胜博发的分享…

胜博发markdown 格式的文本,如何过滤掉markdown标签,生成纯文本?

( 胜博发 )

类似 php 的strip_tag函数功能。主要用于生成文章的描述文本。

忘了说,要求用php转换。

没有现成直接转换的,不过先转成html再过滤掉html标签可以满足你的需求么?

没看到有这样现成的库,因为这个功能点还是挺奇葩的。markdown格式文本的控制字符本来就很少,为什么还要变呢?

如果真的要变,其实也很简单啊,一般markdown转html都是用正则表达式的,去除markdown格式字符用正则表达式非常简单啊。

利用正则表达式替换可以

那肯定是直接从生成的html文件获取最方便咯。在前端生成的html在id为divid的元素里面的话直接document.getElementById("divid").innerText就可以了。

今天碰到一样的问题,我的解决办法跟楼上某个答案说的一样,用正则表达式去除markdown的格式就好了,只需要匹配控制字符.
假设有文章列表界面,posts存着title和content

var reg = /[\\\`\*\_\[\]\#\+\-\!\>]/g;
posts.forEach(post => function () {
    post.shortContent = post.content.replace(reg, "");
    console.log(post.contents);
    console.log(post.shortContents);
}());

这样应该就能得到一个纯文本了。
不过可能没有针对 < 这种做处理,所以还要进一步考虑下啦 🙂

(看完/读完)这篇文章有何感想! 胜博发的分享…

sbf胜博发老虎机地址选择时的地区数据是从哪里弄的?

( sbf胜博发老虎机 )

大家做地址选择时的地区数据, 是从哪里弄的?

我找到了下面这网站

http://seisman.info/china-administrative…

GADM

上面那个 gadm 网站可以弄到全球的地区数据, 有用过的嘛?
大家弄到地区是, 都是在哪里弄的数据?

关于中国的地区数据,中国国家统计局有最新数据。
有别人做好的数据(js):https://github.com/fengyuanchen/distpick…
我这里有数据库版本,最新的。有需要可以联系我发给你邮箱。

反正我每次需要的时候都是把京东的数据扒下来。楼上的数据我看了,并不全,比如深圳的 光明新区,大鹏新区,这些新建立的行政区域并没有包含。
一般来说,京东,淘宝的数据肯定是最全的,写个程序扒下来并不难。
整理了一下,Github 地址在此:https://github.com/upliu/PCD/

一般 你在搜索引擎上搜索 三级联动 数据库 就可以下载到相对应的 数据的
或者你看一下这里 有 js版的http://jsbin.com/xumeruz/edit?js

一般这就是一个数据表,表结构大概是父ID和子ID的关系(类似于商品的三级或多级菜单)。网上有很多这样的数据表。
首先展示的是省份,然后选择省份,拿到对应的省份ID,利用ajax去数据库读取对应的地区,拿到数据后用jsjquery改变html。

再者就像是楼上所说,一开始就加载全部的省份、地区信息,js联动操作。

(看完/读完)这篇文章有何感想! sbf胜博发老虎机的分享…

sbf胜博发老虎机Yii2 为何无法通过变量来创建对象呢?

( sbf胜博发老虎机 )

use root\modules\article\models\ArticleSearch;
$model='ArticleSearch';
$searchModel=new $model();

提示未找到

PHP Fatal Error – yii\base\ErrorException

Class 'ArticleSearch' not found

是使用了命名空间的原因吗?

$model='root\modules\article\models\ArticleSearch';
$searchModel=new $model();

请试试这么写

OR

use root\modules\article\models\ArticleSearch;
$model= ArticleSearch::className();
$searchModel=new $model();

通过变量创建类的时候,一定要包含类全名,不能通过命名空间替代。

(看完/读完)这篇文章有何感想! sbf胜博发老虎机的分享…

胜博发官网php开发手册 查询不到函数啊啊

( 胜博发官网 )

你那个不是php手册。。。
php手册的下载网址在这:
http://php.net/download-docs.php
Chinese (Simplified)那一栏是简体中文的手册。
从左到右分别是:单个的html文件,多个html文件,chm手册,chm带评论的手册。

看你的样子应该是需要chm的。

chm 文档可能会过时哦
直接去php.net 搜索相应函数,或者使用google 搜索 / 百度搜索 php.net call_user_func 就能查到了

你这是ThinkPHP框架的使用手册,不是PHP手册

请用搜索功能。
如果还找不到直接百度

你那个是tp框架手册,不是php手册

你这个是国产的 MVC 软件 thinkphp

(看完/读完)这篇文章有何感想! 胜博发官网的分享…

sbf胜博发老虎机yii2 restful api的执行流程

( sbf胜博发老虎机 )

最近在看Yii2.0的RESTful api部分,看官方示例很简单的就构建出来了,但是不太明白里面的原理。

class UserController extends ActiveController
{
    public $modelClass = 'app\models\User';
}

上面是官方的一个控制器的示例,只指定了一个modelClass,然后配置一下路由,然后通过各种HTTP请求就能获取到相应的数据,请问这是怎么实现的。例如,GET /users: 逐页列出所有用户,这个所有用户的数据是走哪段代码得到的?

看看框架的ActiveController 是怎么实现的不就成了

yii\rest\ActiveController

ActiveController 里的actions

ActiveController也是继承了别的controller,可以追一下源代码

(看完/读完)这篇文章有何感想! sbf胜博发老虎机的分享…

sbf胜博发老虎机求推荐一款适合团队开发的PHP,IDE,能集成SVN!

( sbf胜博发老虎机 )

最好有教程!
感谢!


感谢回答,我想问一下我在Windows server 2012里用IIS + PHP + MySQL部署的服务器,能用代码版本控制吗?我看SVN是基于apache,网上说不能在IIS里用。

这个问题已被关闭,原因:非技术提问的讨论型问题

phpstrom是很好的工具

非phpstorm莫属,
持续集成,跨平台,高颜值。

团队开发是指采用svn或者git方式部署代码 而不是和ide有关系 不过PHP的ide推荐phpstorm(有集成代码版本管理的 svn和git都支持)

早上起来看了下 题主更新了问题,因为我是不用svn的 所以上网找了下资料 ,给题主提供两个建议
1.如果题主的团队一定要在iis下开发并且使用版本管理工具的 可以看下VisualSVN
2.与团队人员协商 将服务器环境更换为lamp再使用SVN或者GIT管理代码(推荐)

PHPStorm

phpstorm,jetbrain的IDE都做得挺好,一致的体验,git集成,代码补全提示,自动格式化代码,帮助你写的代码更规范。

phpstorm大法好,lnmp保平安

zend,或者eclipse mars for php

我用的idea

大家推荐phpstrom,我偏偏要推荐一个免费的netbeans

用ide比较臃肿 写php其实弄个sublime 装点插件就可以了

毫无疑问phpstorm

phpDesigner.

phpstorm大法好,可以集成git svn ftp 同时,基于FTP也能进行差异比对。

zend studio

别犹豫…PHPStorm

大家一般都用phpstorm

phpstorm大法好

gogs(开源git)支持windows服务器

zend studio 和 NetBeans 我都用过 ,可以安装版本控制的插件 很方便

(看完/读完)这篇文章有何感想! sbf胜博发老虎机的分享…

胜博发ngnix rewrite打开页面出现404

( 胜博发 )

修改nginx的rewrite时,网站的首页访问正常,但是其他页面都是404.
查看了nginx日志,发现下面的错误,nginx出现了两次index.php,打开文件时多了一个Index.php,不知什么原因,nginx初学者,希望前辈帮忙看一下是什么原因?还有nginx的.htaccess和apache有什么区别呢?
下面是一些错误信息:

因为你本身的请求路径中包含 index.php url正则rewrite之后包含了路径中的index.php 所以出现了两次

(看完/读完)这篇文章有何感想! 胜博发的分享…

胜博发phalcon

( 胜博发 )

这两天研究phalcon, 感觉mysql查询很慢啊, 是我写的不对吗

bootstrap

 $this->_di->setShared('dbSlave', function () use ($config) {
            return new Mysql(array(
                "host"     => $config->dbSlave->host,
                "username" => $config->dbSlave->username,
                "password" => $config->dbSlave->password,
                "dbname"   => $config->dbSlave->name
            ));
        });
$b = Users::findFirst([
        'id = :bid:',
        'bind' => ['bid' => 1]
    ]);
    echo $b->name;

感觉查询卡了一两秒

MySQL用bind-address = 127.0.0.1限制只能本地访问时,Windows7上PHP用localhost访问MySQL明显变慢,用127.0.0.1则正常.

我用phalcon不会啊,你用php原生的mysqli查询一次看看需要多久。和你php服务器和mysql服务器之间的连接速度也有关系。

(看完/读完)这篇文章有何感想! 胜博发的分享…

胜博发判断服务器上文件是否存在问题

( 胜博发 )

我用的是file_exists函数判断文件是否存在,可奇怪的是如果我只判断文件的目录是否存在返回true,只要一加上文件名就返回false(文件是确实存在的)求教这是为什么?

public function download($file_url){   
        if(!isset($file_url)||trim($file_url)==''){
            echo '路径不正确';exit;
        }
        $filename=$this->get_basename($file_url);       

        $file_name = preg_replace("/(\s|\&nbsp\;| |\xc2\xa0)/","",$filename);       //去掉文件名中的空格。
        $file_name = iconv("UTF-8","GB2312",urldecode($file_name)) ;                //取文件名称,将urlcode编码转回来
        $filename = str_replace( '+', '%20', urlencode($filename) ) ;               //解决urlcode编码空格问题。
        
        //这一步 我把生成的$file 打印出来放在url里回车 直接下载 可是就是在判断文件是否存在哪里一直不通过
        $file = dirname(base_url($file_url)).'/'.$filename  ;
        
        $file = fopen($file,"r");
        if (!$file) { 
            echo "文件找不到"; 
        } else { 
            header("Content-type: application/octet-stream");
            //header("Accept-Ranges: bytes");
            //header("Accept-Length: ".filesize($file_url));
            Header("Content-Disposition: attachment; filename=" . trim($file_name)); 
            while (!feof ($file)) { 
                echo fread($file,50000); 
            } 
            fclose ($file); 
        } 
    }

可能是你的文件夹或者文件的权限问题

应该是你用dirname()的时候返回的路径问题,可以移除结果里面最左边的’/’

fopen要求文件名就是实际的文件名,而你的$filename变量是urlencode的值,所以打不开,却可以下载

(看完/读完)这篇文章有何感想! 胜博发的分享…

sbf胜博发老虎机求助:vue.router的history用法

( sbf胜博发老虎机 )

let router = new VueRouter({
hashbang: true,
history: true,
saveScrollPosition: true,
transitionOnLoad: true
})
之所以开启vue-router的history,我是觉得能方便使用它的定位功能,就是从详细页面返回列表页面能自动定位。
但随之带来了刷新问题。
不使用history,url格式为http://xxx.xxx.xxx/index#!goodslist
使用history后,url格式为http://xxx.xxx.xxx/goodslist
请问,使用history如何能给我每一个url地址自动添加/index#! 。

前端路由模式有两种 一种是 hash 模式,使用 # 导航。另一种是 Html5HistoryAPI 模式,不使用 #。
你开启了 history 就是使用 Html5HistoryAPI 模式,使用这个模式不会添加 #

history.pushstate 自己写进去?

都开了history模式为什么还要这个#!呢?

(看完/读完)这篇文章有何感想! sbf胜博发老虎机的分享…

sbf胜博发老虎机tp框架能开发API接口吗

( sbf胜博发老虎机 )

最近在做毕业设计,原来学过php,打算用tp框架做,但是现在主流的开发模式使用面向接口的开发,tp框架主要是用模板引擎来渲染页面,不知道tp框架中如何写接口?

答案是必然的,你可以翻看tp手册,里面有一节讲的关于restful接口的操作和写法

你的问题和
‘’php能开发api接口吗‘’没有任何区别。

TP的controller其实有很多种的
HproseController,JsonRpcController,RestController,RpcController,YarController

我拿RestController给你介绍一下

RESTFul方法的操作方法定义主要区别在于,需要对请求类型和资源类型进行判断,大多数情况下,通过路由定义可以把操作方法绑定到某个请求类型和资源类型。如果你没有定义路由的话,需要自己在操作方法里面添加判断代码,示例:

namespace Home\Controller;
use Think\Controller\RestController;
Class InfoController extends RestController {
   Public function rest() {
     switch ($this->_method){
      case 'get': // get请求处理代码
           if ($this->_type == 'html'){
           }elseif($this->_type == 'xml'){
           }
           break;
      case 'put': // put请求处理代码
           break;
      case 'post': // post请求处理代码
           break;
     }
   }
 }

在Rest操作方法中,可以使用$this->_type获取当前访问的资源类型,用$this->_method获取当前的请求类型。

REST控制器类还提供了response方法用于REST输出: 用法如下:

$this->response($data,'json');

Response方法会自动对data数据进行输出类型编码,目前支持的包括xml/json/html。
除了普通方式定义Restful操作方法外,系统还支持另外一种自动调用方式,就是根据当前请求类型和资源类型自动调用相关操作方法。

要使用这种方式的前提就是不能为当前操作定义方法,这样在空操作的检查之前系统会首先按照上面的定义规范顺序检查是否存在方法定义,如果检测到相关的restful方法则不再检查后面的方法规范,例如我们定义了InfoController如下:

namespace Home\Controller;
use Think\Controller\RestController;
Class InfoController extends RestController {
    protected $allowMethod    = array('get','post','put'); // REST允许的请求类型列表
    protected $allowType      = array('html','xml','json'); // REST允许请求的资源类型列表

    Public function read_get_html(){
        // 输出id为1的Info的html页面
    }

    Public function read_get_xml(){
        // 输出id为1的Info的XML数据
    }
    Public function read_xml(){
        // 输出id为1的Info的XML数据
    }
    Public function read_json(){
        // 输出id为1的Info的json数据
    }
}

如果我们访问的URL是:

http://www.domain.com/Info/read/id/1.xml

假设我们没有定义路由,这样访问的是Info控制器的read操作,那么上面的请求会调用InfoController类的 read_get_xml方法,而不是read_xml方法,但是如果访问的URL是:

http://www.domain.com/Info/read/id/1.jso…

那么则会调用read_json方法。

如果我们访问的URL是

http://www.domain.com/Info/read/id/1.rss

由于我们不允许rss资源类型的访问,所以,调用的方法其实是read_html方法。

(看完/读完)这篇文章有何感想! sbf胜博发老虎机的分享…

胜博发官网大神看下这个数据要怎么处理?

( 胜博发官网 )

现在有两个表
表1 有course_id和student
表2 也有course_id和student_id
如果在表1中的course_id和student_id在表2中出现表示已购买, 否则为 未购买。

现在我要获取表1 中未购买的数据~

我之前用的foreach表1的数据然后根据course_id和student_id去查询表2,如果存在说明已购买。但是这种方式会很慢,没遍历一次会查询一次表;

求大神指点更快的方法。(不修改表结构)

感谢各位的意见。这样也可以~

select * from A where (course_id,student_id) not in (select course_id,student_id from B)

如果你用的是mysql或者oracle,用下面的语法:

SELECT course_id, student FROM table1
MINUS SELECT course_id, student from table2;

其他的把MINUS换成EXCEPT。

(看完/读完)这篇文章有何感想! 胜博发官网的分享…

sbf胜博发老虎机mysql select for update问题 ,如果我同一个会话开启多个事物?

( sbf胜博发老虎机 )

前一个事务会消失吗?

参考资料:http://blog.csdn.net/w1870462…

搜索关键字:mysql 事务 嵌套

你设置一下数据库事务级别测试一下不就知道了

(看完/读完)这篇文章有何感想! sbf胜博发老虎机的分享…

胜博发PHP的一个库,求详细信息。

( 胜博发 )

经常性闭门造车,对PHP其他的事了解甚少。
今天在研究Typeche的时候又遇到了类似:

a:2:{s:7:"logoUrl";N;s:12:"sidebarBlock";a:5:{i:0;s:15:"ShowRecentPosts";i:1;s:18:"ShowRecentComments";i:2;s:12:"ShowCategory";i:3;s:11:"ShowArchive";i:4;s:9:"ShowOther";}}
<?php exit;//a:4:{i:4;a:1:{i:0;a:3:{s:6:"tagurl";s:18:"%E4%B8%8D%E7%9D%A1";s:7:"tagname";s:6:"不睡";s:3:"tid";i:2;}}i:3;a:1:{i:0;a:3:{s:6:"tagurl";s:18:"%E6%B0%B4%E6%B0%B4";s:7:"tagname";s:6:"水水";s:3:"tid";i:1;}}i:2;a:0:{}i:1;a:0:{}}

的数据库配置,想知道这个格式的配置的相关信息,百度也不好百度,今天跟踪代码也没找到,求各位大大指点一下。

php序列化的结果
通过unserialize可以将这个字符串转为php变量。

做缓存经常用到serialize

今天强行想找如下格式的储存文件是由啥生成的:

a:4:{i:4;a:1:{i:0;a:3:{s:6:"tagurl";s:18:"%E4%B8%8D%E7%9D%A1";s:7:"tagname";s:6:"不睡";s:3:"tid";i:2;}}i:3;a:1:{i:0;a:3:{s:6:"tagurl";s:18:"%E6%B0%B4%E6%B0%B4";s:7:"tagname";s:6:"水水";s:3:"tid";i:1;}}i:2;a:0:{}i:1;a:0:{}}

妈的智障,先是在Typecho中找了3个小时,使出浑身解数还是没发现。。。。。。
吐血的是,联想到Emlog这个PHP程序的缓存就是这种格式的,MDZZ的我稍微一跟踪就看到了代码:

$cacheData = serialize($tag_cache);
$this->cacheWrite($cacheData, 'tags');

一切水落石出了,MDZZ。。。。亏我花了3小时,太他妈浪费时间了!

    function MDZZ()
    {
        $array=['name'=>'DXKite','type'=>'智障'];
        $str=serialize($array);
        var_dump($str);
        var_dump(unserialize($str));
    }

输出:

string(54) "a:2:{s:4:"name";s:6:"DXKite";s:4:"type";s:6:"智障";}" array(2) { ["name"]=> string(6) "DXKite" ["type"]=> string(6) "智障" }

php语言里,数组内容想要直接保存至数据库中,经常会用到serialize,但是呢,serialize经常会出现一些莫名其妙的错误,encode编码效率不如json_encode,且生成编码量比json_encode多。
建议使用json_encode。

(看完/读完)这篇文章有何感想! 胜博发的分享…

sbf胜博发老虎机哪种设计比较好,或者有什么更好的设计

( sbf胜博发老虎机 )

第一种:

@Transactional
public String submit(){
    1//检查参数合法性
    2//进入一个同步方法,修改库存modifyStock()
    3//插入两条记录信息数据
}
public String modifyStock(){
    lock.lock()
     try {
          修改库存   
     } catch (Exception e) {
                    
     }finally{
     lock().unlock();
     }
    
}

第二种:

@Transactional
public String submit(){
    1//检查参数合法性
    2//调用修改库存方法modifyStock()
    3//插入两条记录信息数据
}
@Transactional(isolation=Isolation.SERIALIZABLE)
public String modifyStock(){
    修改库存
}

我第二种对事务的配置感觉有点问题,希望大神修正一下。并给出哪个方案比较好,或者有什么更好的方案

修改个库存数量就加Isolation.SERIALIZABLE,没必要吧。没见过哪个项目这样弄的。第二种方案不行。
第一个方案为什么要加内存锁?解决什么问题?分布式怎么办?
正常加事务扣减就行,怕并发也是加数据库的乐观/悲观锁。

第一种是在运行时环境也就是内存级别加锁,第二种是在事务层面也就是数据库层面加锁。

我感觉第二种好一点,因为第一种如果用多机就不行了。

(看完/读完)这篇文章有何感想! sbf胜博发老虎机的分享…

胜博发官网MYSQL中如何把SELECT A AS B中的B作为WHERE筛选条件

( 胜博发官网 )

比如SELECT a AS b WHRER b=1;

我这样使用会报错,说b不存在。

因为mysql底层跑SQL语句时:where 后的筛选条件在先, as B的别名在后。
所以机器看到where 后的别名是不认的,所以会报说B不存在。

如果非要用B做筛选条件的话:
解决方案:外边再嵌套一层。
select * from
(
select A as B from table
) t
where t.B = XXX — 任意的筛选条件

如果不嵌套,只能用A做筛选条件了

当然不存在,这个b只针对与a查询结果的一个别名
select a AS b FROM table where a = 1

select t.b from
(

select a as B from table

) t

where t.b =xxxx

此时的B是可以直接在where中使用的

b是对查询结果a取的别名where里面肯定是不存在啊

(看完/读完)这篇文章有何感想! 胜博发官网的分享…