Laravel 5控制器返回值无法正常工作

时间:2017-06-11 16:36:23

标签: php laravel laravel-5 view controller

我是laravel 5.4.i的新手,就像这样开发了search_code控制器。

public function search_code(Request $request){
    $query      = $request->search;
    $queryType  = $request->institute; // 'id' or 'name'
    $items      = DB::table('registerdetails');        

    if($queryType == 'id'){
        $items = $items->where('trainee_id', 'LIKE',"%$query%");
    }
    if($queryType == 'full_name'){
        $items = $items->where('full_name', 'LIKE',"%$query%");
    }
    $items = $items->get();
    return view('traineeattendance.index')->with('items',$items);
}

我需要的是$ item需要传递并在此控制器的两个不同视图中调用,如

return view('traineeattendance.index')->with('items',$items);

return view('traineeattendance.attendance')->with('items',$items);

我该怎么做?

3 个答案:

答案 0 :(得分:0)

<?php

namespace App\Providers;

use Illuminate\Support\Facades\View;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        View::share('items', search_code()); // this line will inject the return value of search_code() in all views in your app
    }

    /**
     * Register the service provider.
     *
     * @return void
     */
    public function register()
    {
        //
    }
}

答案 1 :(得分:-1)

使用类似params的内容。

你的案子:

在启动方法上转到AppServiceProvider添加行: *不要忘记导入课程

然后在引导方法上添加一行:

view::share('variable_name', 'variable_value')

这将从方法View::share('items', search_code()); 中获取返回值,并将其作为search_code()

提供给所有视图

像这样:转到App-Providers- AppServiceProvider上的$items并在引导方法上添加以下内容,包括顶部的命名空间。

AppServiceProviders.php

答案 2 :(得分:-1)

首先,在MVC框架中停止使用DB facade,除非它是非常复杂的查询。 改为创建模型

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class RegisterDetails extends Model
{
    protected $table        = 'registerdetails';
    /* Look into documentation for rest of the fields */
}

然后,您需要搜索创建模型范围所需的一切

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class RegisterDetails extends Model
{
    protected $table        = 'registerdetails';

    public static function scopeTrainee($query, $input)
    {
        if(!empty($input)) {
            $query->where("trainee_id", $input);
        }
    }

    public static function scopeFullname($query, $input)
    {
        if(!empty($input)) {
            $query->where("full_name", 'LIKE', $input);
        }
    }
}

简化您的控制器代码

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Models\RegisterDetails;

class RegisterDetailsController extends Controller
{   
    public $data = [];

    public function search_code(Request $request){
        if($request->institute == 'id'){
            $this->data['items'] = RegisterDetails::Trainee($request->search)->get();
        }
        if($request->institute == 'full_name'){
            $this->data['items'] = RegisterDetails::FullName($request->search)->get();
        }
        return view('traineeattendance.index', $this->data);
    }
}

现在索引视图包含项目数据,如果您在索引视图中使用出勤视图,它也可以访问此数据。

如果索引和出席都是不同的视图(一个不包含在另一个视图中),那么你在设计层面做错了,你需要更多地解释一下这个案例