如何修复"未定义的变量:合作者"?

时间:2017-10-15 13:16:57

标签: php laravel-5 laravel-5.2

我正在开发协作者,为项目管理应用程序添加方法。这是我的合作者添加表格。 colllaborators/form.blade.php

<div class="col-md-4" style="border:1px solid #ccc;margin-left:15px;padding:10px;">
        <h4 class="page-header">
            Collaborators
        </h4>
        @if( $collaborators)
           @foreach( $collaborators as $collaborator)
                <div>
                    <div>
                        <span>
                            <img src="{{ $collaborator->user()->first()->getAvatarUrl() }}" />
                        </span>
                    </div>
                    <button class="btn btn-sm btn-danger delete" style="margin-top:5px;padding:4px;width:35px;"
                      data-action="/projects/{{ $project->id }}/collaborators/{{ $collaborator->collaborator_id }}"

路由

Route::post('projects/{projects}/collaborators', [
    'uses' => 'Project\Collaborators\Controller@addCollaborator',
    'as'   => 'projects.collaborators.create',
    'middleware' => ['auth']
]);

但是当我点击协作者添加按钮后显示错误消息。

Undefined variable: collaborators (View: C:\Users\Flex\Desktop\ddd\resources\views\collaborators\form.blade.php)

我该如何解决这个问题 的编辑

class ProjectCollaboratorsController extends Controller
{

    public function addCollaborator(Request $request, $id, Collaboration $collaboration)
    {
       $this->validate($request, [
            'collaborator'     => 'required|min:5',
        ]);

       $collaborator_username           = substr(trim($request->input('collaborator')),1);
       $collaboration->project_id       = $id;
       if( is_null($this->getId($collaborator_username)))
       {
            return redirect()->back()->with('warning', 'This user does not exist');
       }

       $collaborator = $this->isCollaborator($id, $this->getId($collaborator_username));
       if(! is_null($collaboration))
       {
            return redirect()->back()->with('warning', 'This user is already a collaborator on this project');
       }

       $collaboration->collaborator_id  = $this->getId($collaborator_username);
       $collaboration->save();

       return redirect()->back()->with('info', "{$collaborator_username} has been added to your project successfully");
    }

    private function getId($username)
    {
        $result = User::where('username', $username)->first();

        return (is_null($result)) ? null : $result->id;
    }


    private function isCollaborator($projectId, $collaboratorId)
    {
        return Collaboration::where('project_id', $projectId)
                            ->where('collaborator_id', $collaboratorId)
                            ->first();
    }

}

请参阅表单的其他部分

<form class="form-vertical" role="form" method="post" action="{{ route('projects.collaborators.create', $project->id) }}">

协作者表格路线

Route::get('/collaborators', function(){ 
   return view('collaborators.form'); 
})->name('collaborators.form');

1 个答案:

答案 0 :(得分:1)

在您的表单页面中,您正在检查@if( $collaborators),检查$collaborators变量是否为空,然后运行其下方的foreach

提交表单后,您添加了协作者并重定向,但没有collaborators。 if条件然后尝试检查变量是否为空。此时变量尚未定义,因此会抛出该错误。要修复此错误,请使用collaborators返回重定向,如下所示:

 public function addCollaborator(Request $request, $id, Collaboration $collaboration)
    {
       $this->validate($request, [
            'collaborator'     => 'required|min:5',
        ]);

       $collaborator_username           = substr(trim($request->input('collaborator')),1);
       $collaboration->project_id       = $id;
       if( is_null($this->getId($collaborator_username)))
       {
            return redirect()->back()->with('warning', 'This user does not exist');
       }

       $collaborator = $this->isCollaborator($id, $this->getId($collaborator_username));
       if(! is_null($collaboration))
       {
            return redirect()->back()->with('warning', 'This user is already a collaborator on this project');
       }

       $collaboration->collaborator_id  = $this->getId($collaborator_username);
       $collaboration->save();
//Get all collaborators 
  $collaborators = Collaboration::all(); //if this is how you get all collaborators
//Get the project too
 $project = Project::findOrFail($id);
       return redirect()->back()->with(['collaborators'=>$collaborators,'project'=>$project,'info'=> "{$collaborator_username} has been added to your project successfully"]);
    }

修改

使用with方法将数据放入会话中,我建议您手动重定向到视图并将message闪存到该视图。

public function addCollaborator(Request $request, $id, Collaboration $collaboration)
        {
           $this->validate($request, [
                'collaborator'     => 'required|min:5',
            ]);

           $collaborator_username           = substr(trim($request->input('collaborator')),1);
           $collaboration->project_id       = $id;
           if( is_null($this->getId($collaborator_username)))
           {
                return redirect()->back()->with('warning', 'This user does not exist');
           }

           $collaborator = $this->isCollaborator($id, $this->getId($collaborator_username));
           if(! is_null($collaboration))
           {
                return redirect()->back()->with('warning', 'This user is already a collaborator on this project');
           }

           $collaboration->collaborator_id  = $this->getId($collaborator_username);
           $collaboration->save();
    //Get all collaborators 
      $collaborators = Collaboration::all(); //if this is how you get all collaborators
     //Get the project too
       $project = Project::findOrFail($id);
           return redirect()->route('collaborators.form',['collaborators'=>$collaborators,'project'=>$project])->with('info',"{$collaborator_username} has been added to your project successfully");
        }

修改2

我更改了所有return redirect()->back()&#39>

public function addCollaborator(Request $request, $id, Collaboration $collaboration)
    {
       $this->validate($request, [
            'collaborator'     => 'required|min:5',
        ]);

       $collaborator_username           = substr(trim($request->input('collaborator')),1);
       $collaboration->project_id       = $id;

       //Get the project too
       $project = Project::findOrFail($id);

       if( is_null($this->getId($collaborator_username)))
       {
            return redirect()->route('collaborators.form',['project'=>$project])->with('warning', 'This user does not exist');
       }

       $collaborator = $this->isCollaborator($id, $this->getId($collaborator_username));
       if(! is_null($collaboration))
       {
            return redirect()->route('collaborators.form',['project'=>$project])->with('warning', 'This user is already a collaborator on this project');
       }

       $collaboration->collaborator_id  = $this->getId($collaborator_username);
       $collaboration->save();

       return redirect()->route('collaborators.form',['project'=>$project])->with('info',"{$collaborator_username} has been added to your project successfully");
    }

将您的routes更改为

Route::get('/project/{project}/collaborators', function($id){ 
       $collaborators = Collaboration::all();
       $project = Project::findOrFail($id);
       return view('collaborators.form',compact('collaborators','project')); 
    })->name('collaborators.form');