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
版本的Controllers
的construct
不能再获取的到session
值以及当前登录(认证通过)的用户信息
protected $projects;
public function __construct()
{
//will always get `null`
$this->projects = Auth::user()->projects;
}
复制代码
6、三元运算符?:
及??
-
??
: 如果变量存在且值不为NULL
, 它就会返回自身的值,否则返回它的第二个操作数。 -
?:
: 自PHP 5.3
起,可以省略三元运算符中间那部分。表达式expr1 ?: expr3
在expr1
求值为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、创建外键
失败
遇到问题记录:使用
Laravel
的php 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.js
及editor.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() }}">