Laravel使用遇到问题记录一

1、修改login成功后的跳转路径

修改App\Http\Controllers\Auth\LoginController中的属性值$redirectTo

    //Laravel 5.6
    protected $redirectTo = 'new url';
复制代码

变更register的话修改App\Http\Controllers\Auth\RegisterController中的属性值$redirectTo

2、修改身份验证成功后,页面输入/login /register后跳转的路径

修改App\Http\Middleware\RedirectIfAuthenticated中的handle方法。

    //修改 `redirect` 中的 url
    public function handle($request, Closure $next, $guard = null)
    {
        if (Auth::guard($guard)->check()) {
            return redirect('new url');
        }

        return $next($request);
    }
复制代码

3、设置执行时间上限为300秒,默认是30秒

也可以直接修改php.ini中的配置项max_execution_time = 300 #default 30

    ini_set('max_execution_time', 300);
复制代码

4、手动更新 autoloader

打印自动加载索引 dump-autoload

    composer dump-autoload
复制代码

5、Laravel5.3+Controllers:Session In The Constructor

  • 5.3及之后的Laravel版本的Controllersconstruct不能再获取的到session值以及当前登录(认证通过)的用户信息

protected $projects;
public function __construct()
{
    //will always get `null`
    $this->projects = Auth::user()->projects;
}
复制代码

6、三元运算符?:??

  • ??: 如果变量存在且值不为NULL, 它就会返回自身的值,否则返回它的第二个操作数。

  • ?:: 自 PHP 5.3 起,可以省略三元运算符中间那部分。表达式 expr1 ?: expr3expr1 求值为 TRUE 时返回 expr1,否则返回 expr3

$item1 = 0;
$item2 = null;

echo  $item1 ?: 'Y';// Y
echo  $item1 ?? 'Y';// 0
echo  $item2 ?: 'Y';// Y
echo  $item2 ?? 'Y';// Y
复制代码

7、Eloquent: get() or first()

updated_at:20180803:first()返回Eloquent\Modal类实例,get()返回的是Illuminate\Database\Eloquent\Collection集合 如果查询结果需要empty()判断,则使用first(),使用get()即使查询不出结果也会返回一个空的collection

//if we can't find $name in Member
$member = Member::whereName($name)->first();
//OK
if (empty($member)) {
    return $this->jsonResult(40506);
}
//always false
$member = Member::whereName($name)->get();
dd(empty($member));//false
复制代码

8、创建外键失败

遇到问题记录:使用Laravelphp artisan make:migration中代码如下

    public function up()
    {
        Schema::create('wk_collections', function (Blueprint $table) {
            $table->increments('id');
            $table->integer('member_id')->comment('用户ID');
            $table->integer('project_id')->comment('项目ID');
            $table->bigInteger('document_id')->comment('文档ID');
            $table->timestamps();

            //unique index
            $table->unique(['member_id', 'project_id', 'document_id']);

            //外键约束
            $table->foreign('member_id')
                ->references('id')->on('users')
                ->onDelete('cascade');
            $table->foreign('project_id')
                ->references('project_id')->on('wk_project')
                ->onDelete('cascade');
            $table->foreign('document_id')
                ->references('doc_id')->on('wk_document')
                ->onDelete('cascade');

        });
    }
复制代码

上面的代码运行php artisan migrate 会报错误,具体错误在MySQL中运行SHOW ENGINE INNODB STATUS;然后将错误拷贝出来,查看LATEST FOREIGN KEY ERROR这一段


2018-05-01 09:51:03 0x2eec Error in foreign key constraint of table populac/#sql-148c_9:
 FOREIGN KEY (`member_id`) REFERENCES `populac`.`users` (`id`):
Cannot find an index in the referenced table where the
referenced columns appear as the first columns, or column types
in the table and the referenced table do not match for constraint.
Note that the internal storage type of ENUM and SET changed in
tables created with >= InnoDB-4.1.12, and such columns in old tables
cannot be referenced by such columns in new tables.
Please refer to http://dev.mysql.com/doc/refman/8.0/en/innodb-foreign-key-constraints.html for correct foreign key definition.
复制代码

谷歌一下,发现错误应该是migration:$table->integer('member_id')->comment('用户ID');默认建立的字段member_id int(11),而users::id int(10),MySQL外键和关联表的字段长度需要严格一致

...
//原代码
$table->integer('member_id')->comment('用户ID');
//修改成
$table->addColumn('integer', 'member_id', ['unsigned' => true, 'length' => 10])->comment('用户ID');
//或者
$table->integer('member_id')->unsigned()->comment('用户ID');
...
复制代码

9、使用 Editor.md 上传图片/文件如何处理

  • Editor.md
  • 修改editor.md/plugins/image-dialog/image-dialog.jseditor.md/plugins/file-dialog/file-dialog.js
        if (settings.crossDomainUpload)
        {
          action += "&callback=" + settings.uploadCallbackURL + "&dialog_id=editormd-file-dialog-" + guid;
        }
        //add csrf-token here
        var csrfToken = $('meta[name="csrf-token"]').attr('content');
        var csrfField = "";
        if (csrfToken) {
          csrfField = "<input type='hidden' name='_token' value='" + csrfToken + "' />";
        }
        //add csrf below 
        var dialogContent = ( (settings.fileUpload) ? "<form action=\"" + action +"\" target=\"" + iframeName + "\" method=\"post\" enctype=\"multipart/form-data\" class=\"" + classPrefix + "form\">" : "<div class=\"" + classPrefix + "form\">" ) +
          ( (settings.fileUpload) ? "<iframe name=\"" + iframeName + "\" id=\"" + iframeName + "\" guid=\"" + guid + "\"></iframe>" : "" ) +
          "<label>" + fileLang.url + "</label>" +
          "<input type=\"text\" data-url />" + (function(){
            return (settings.fileUpload) ? "<div class=\"" + classPrefix + "file-input\">" + csrfField +
              "<input type=\"file\" name=\"" + classPrefix + "file-file\" />" +
              "<input type=\"submit\" value=\"" + fileLang.uploadButton + "\" />" +
              "</div>" : "";
          })() +
          "<br/>" +
          "<label>" + fileLang.alt + "</label>" +
          "<input type=\"text\" value=\"" + selection + "\" data-alt />" +
          "<br/>" +
          "<input type='hidden' data-icon>"+
          ( (settings.fileUpload) ? "</form>" : "</div>");
复制代码
  • 文件头的meta加上<meta name="csrf-token" content="{{ csrf_token() }}">
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值