Laravel框架illuminate\support\collection排序问题

Laravel框架illuminate\support\collection排序问题技术

maybe yes 发表于2015-04-03 00:59

原文链接 : http://blog.lmlphp.com/archives/101/Web_artisan_laravel_framework_collection_sort_issue  来自 : LMLPHP后院

Laravel 的 Collection 的排序有个问题,前几天折腾了好久,一直怀疑是自己代码有问题。Collection 对象执行 sort 后需要执行 values 方法,否则 Collection 对象的 items 排序结果没有生效。当然手动的 toArray() 是生效的。查看 Collection sort 方法内部实现是调用了 PHP 的 uasort 函数,该函数排序后会维持原来的 key => value 关系。

官方文档截取如下:

Collection values()

Reset the keys on the underlying array.

Return Value

Collection

一直弄不明白,为什么这个方法叫 values,这个取名真让人费解,values 方法内部使用 array_values 方法对 items 进行了重新赋值。有时候,开发特别折腾,一直在更改... 代码片段如下,需要调用 values 方法使得排序生效。

$left = $right = null;
switch($sortby){
    case "rating":
    case "month_sales":
        $left = -1;
        $right = 1;
        break;
    case "order_lead_time":
    case "minimum_order_amount":
        $left = 1;
        $right = -1;
        break;
}
if($ascending === "1"){
    $left = 1;
    $right = -1;
}elseif($ascending === "0"){
    $left = -1;
    $right = 1;
}
$restaurants->sort(function($a, $b) use ($sortby, $left, $right){
    return ($a->{$sortby} >= $b->{$sortby}) ? $left : $right;
});
$restaurants->values();

开发过程中特别的挑刺,过分的在乎变量命名和参数方式,过早的优化代码,都是不好的。这个世界上应该没有哪两家的公司的业务是完全一样的,用了太多的开源软件也不一定是好事。顺便评价下 Laravel,传说中的 Artisan,我感觉用起来很不舒畅,错误日志不打印日期,不打印哪里出错,叫人怎么调试。

sort 方法 和 values 方法内部实现代码:

public function sort(Closure $callback)
{
    uasort($this->items, $callback);
    return $this;
}

public function values()
{
    $this->items = array_values($this->items);
    return $this;
}

阅(498)评(0)查看评论


转载于:https://my.oschina.net/hosser/blog/616812

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Laravel 框架中,可以使用 Laravel 自带的身份验证系统来实现用户名登录。具体步骤如下: 1. 配置数据库 在 `.env` 文件中配置数据库连接信息,如下所示: ``` DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=your_database_name DB_USERNAME=your_database_username DB_PASSWORD=your_database_password ``` 2. 创建用户表 运行以下 Artisan 命令来创建用户表: ``` php artisan make:model User -m ``` 该命令将同时生成 `app/User.php` 模型文件和 `database/migrations/xxxx_xx_xx_xxxxxx_create_users_table.php` 迁移文件。在迁移文件中定义用户表的字段和属性,如下所示: ```php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; class CreateUsersTable extends Migration { public function up() { Schema::create('users', function (Blueprint $table) { $table->id(); $table->string('name'); $table->string('email')->unique(); $table->timestamp('email_verified_at')->nullable(); $table->string('password'); $table->rememberToken(); $table->timestamps(); }); } public function down() { Schema::dropIfExists('users'); } } ``` 运行以下命令来执行迁移: ``` php artisan migrate ``` 3. 创建控制器 运行以下 Artisan 命令来创建控制器: ``` php artisan make:controller AuthController ``` 在 `AuthController` 中定义登录和退出登录方法,如下所示: ```php use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; class AuthController extends Controller { public function showLoginForm() { return view('auth.login'); } public function login(Request $request) { $credentials = $request->only('email', 'password'); if (Auth::attempt($credentials)) { // Authentication passed... return redirect()->intended('/dashboard'); } return back()->withErrors([ 'email' => 'The provided credentials do not match our records.', ]); } public function logout(Request $request) { Auth::logout(); $request->session()->invalidate(); $request->session()->regenerateToken(); return redirect('/'); } } ``` 4. 创建路由 在 `routes/web.php` 文件中定义登录和退出登录路由,如下所示: ```php Route::get('login', [AuthController::class, 'showLoginForm'])->name('login'); Route::post('login', [AuthController::class, 'login']); Route::post('logout', [AuthController::class, 'logout'])->name('logout'); ``` 5. 创建登录表单 在 `resources/views/auth/login.blade.php` 文件中定义登录表单,如下所示: ```html <form method="POST" action="{{ route('login') }}"> @csrf <div> <label for="email">Email</label> <input id="email" type="email" name="email" value="{{ old('email') }}" required autofocus> @error('email') <span>{{ $message }}</span> @enderror </div> <div> <label for="password">Password</label> <input id="password" type="password" name="password" required autocomplete="current-password"> @error('password') <span>{{ $message }}</span> @enderror </div> <div> <button type="submit">Login</button> </div> </form> ``` 以上就是使用 Laravel 框架实现用户名登录的步骤,希望能对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值