【问题标题】:Laravel Chained Select Failed to load resource: the server responded with a status of 500Laravel Chained Select 加载资源失败:服务器响应状态为 500
【发布时间】:2014-04-10 22:52:24
【问题描述】:

完成编辑

我已经编辑了我的原始问题,因为我已经改进了我的代码,这使我能够更好地定义一个更好的错误

您好,我正在创建一个链接选择框,一旦选择了客户,它将找到客户项目。

ajax 正在做它的工作,它知道选择了哪个客户端,我的控制台告诉我以下信息:

Failed to load resource: the server responded with a status of 500 (Internal Server Error) http://itempus.dev/task/clientsprojects?option=5

上面的选项值是指我想传递到项目数据库并找到客户项目的客户 ID。我不确定我做错了什么,对于新手来说有点复杂的任务,我希望能得到一些帮助。

任务控制器

public function create()
    {
        $tasks = Auth::user()->tasks;   
        $client_options = DB::table('clients')->orderBy('client_name', 'asc')->lists('client_name','id');
        $team_options = DB::table('teams')->orderBy('team_member_name', 'asc')->lists('team_member_name','id', 'team_member_category');
        return View::make('tasks.create', array('project_options' => $project_options, 'team_options' => $team_options, 'client_options' => $client_options));
}       

public function clientsprojects() {

        $input = Input::get('option');
        $client_id = Project::find($input);
        $projects = DB::table('projects')->where('client_id', $client_id->id)
                                           ->orderBy('project_name')
                                           ->lists('id','project_name');
        $models = $project->projects();
        return Response::eloquent($models->get(array('id','project_name')));    
        }

views/tasks/create.blade.php

{{ Form::open(array('action' => 'TaskController@store', 'id' => 'createuser')) }}
    <div class="form-group">
        @if(count($client_options)>0)

           {{ Form::label('select_client', 'Assign to Client', array('class' => 'awesome client_option'));  }}
        {{ Form::select('client', $client_options , Input::old('client'), array('class' => 'tempus_select client_option', 'id' => 'select_client')) }}

        @endif 
    </div>

    <div class="form-group deletegates">

            {{ Form::label('select_client', 'Assign to Project', array('class' => 'awesome'));  }}
        {{ Form::select('project', array_merge(array('default' => 'Please Select')), 'default', array('class' => 'tempus_select', 'id' => 'project_select')) }}

</div>
    {{ Form::submit('Create the task!', array('class' => 'btn btn-primary')) }}

{{ Form::close() }}
<script>
    $(document).ready(function($){
        $('#select_client').change(function(){
        $.get("{{ url('task/clientsprojects')}}", 
        { option: $(this).val() }, 
        function(data) {
            var model = $('#project_select');
            model.empty();

            $.each(data, function(index, element) {
                model.append("<option value='"+ element.id +"'>" + element.name + "</option>");
            });
        });
        });
    });
</script>

Route.php

我也这样定义了我的路线:

Route::get('task/clientsprojects', function(){
    $input = Input::get('option');
    $client_id = Project::find($input);
    $projects = DB::table('projects')->where('client_id', $client_id->id)
                               ->orderBy('project_name')
                               ->lists('id','project_name');
    $models = $project->projects();
    return Response::eloquent($models->get(array('id','project_name')));
});

更新

jquery console errorGET http://itempus.dev/task/clientsprojects?option=7 500 (Internal Server Error) jquery.js:8475
send jquery.js:8475
st.extend.ajax jquery.js:7930
st.(anonymous function) jquery.js:7569
(anonymous function) create:210
st.event.dispatch jquery.js:3045
y.handle jquery.js:2721

应用程序/存储/日志

[2014-03-12 17:01:00] log.ERROR: exception 'Symfony\Component\HttpKernel\Exception\NotFoundHttpException' in C:\xampp\htdocs\iTempus\vendor\laravel\framework\src\Illuminate\Routing\Router.php:1429
Stack trace:
#0 C:\xampp\htdocs\iTempus\vendor\laravel\framework\src\Illuminate\Routing\Router.php(1050): Illuminate\Routing\Router->handleRoutingException(Object(Symfony\Component\Routing\Exception\ResourceNotFoundException))
#1 C:\xampp\htdocs\iTempus\vendor\laravel\framework\src\Illuminate\Routing\Router.php(1014): Illuminate\Routing\Router->findRoute(Object(Illuminate\Http\Request))
#2 C:\xampp\htdocs\iTempus\vendor\laravel\framework\src\Illuminate\Foundation\Application.php(574): Illuminate\Routing\Router->dispatch(Object(Illuminate\Http\Request))
#3 C:\xampp\htdocs\iTempus\vendor\laravel\framework\src\Illuminate\Foundation\Application.php(550): Illuminate\Foundation\Application->dispatch(Object(Illuminate\Http\Request))
#4 C:\xampp\htdocs\iTempus\public\index.php(49): Illuminate\Foundation\Application->run()
#5 {main} [] []
[2014-03-12 17:01:00] log.ERROR: exception 'Symfony\Component\HttpKernel\Exception\NotFoundHttpException' in C:\xampp\htdocs\iTempus\vendor\laravel\framework\src\Illuminate\Routing\Router.php:1429
Stack trace:
#0 C:\xampp\htdocs\iTempus\vendor\laravel\framework\src\Illuminate\Routing\Router.php(1050): Illuminate\Routing\Router->handleRoutingException(Object(Symfony\Component\Routing\Exception\ResourceNotFoundException))
#1 C:\xampp\htdocs\iTempus\vendor\laravel\framework\src\Illuminate\Routing\Router.php(1014): Illuminate\Routing\Router->findRoute(Object(Illuminate\Http\Request))
#2 C:\xampp\htdocs\iTempus\vendor\laravel\framework\src\Illuminate\Foundation\Application.php(574): Illuminate\Routing\Router->dispatch(Object(Illuminate\Http\Request))
#3 C:\xampp\htdocs\iTempus\vendor\laravel\framework\src\Illuminate\Foundation\Application.php(550): Illuminate\Foundation\Application->dispatch(Object(Illuminate\Http\Request))
#4 C:\xampp\htdocs\iTempus\public\index.php(49): Illuminate\Foundation\Application->run()
#5 {main} [] []

更新 2

修改后的代码还是一样的错误。

TaskController.php

public function create()
        {
            $tasks = Auth::user()->tasks;   

        $client_options = DB::table('clients')->orderBy('client_name', 'asc')->lists('client_name','id');


    $project_options = DB::table('projects')->orderBy('project_name', 'asc')->lists('project_name','id');

    $team_options = DB::table('teams')->orderBy('team_member_name', 'asc')->lists('team_member_name','id', 'team_member_category');

    return View::make('tasks.create', array('project_options' => $project_options, 'team_options' => $team_options, 'client_options' => $client_options));
}   

routes.php

Route::get('task/clientsprojects', function(){
    $input = Input::get('option');
    $client = Client::find($input);
    $projects = DB::table('projects')->where('client_id', $client->id)
                           ->orderBy('project_name')
                           ->lists('id','project_name');
    $response = array(array());
    $i = 0;
    foreach($projects as $project){
    $response[$i]['id'] = $project->id;
    $response[$i]['name'] = $project->name;
    $i++; 
    }

    return json_encode($response);
});

create.blade.php

{{ Form::open(array('action' => 'TaskController@store', 'id' => 'createuser')) }}
    <div class="form-group">
        @if(count($client_options)>0)

            {{ Form::label('select_client', 'Assign to Client', array('class' => 'awesome client_option')); }}
    {{ Form::select('client', $client_options , Input::old('client'), array('class' => 'tempus_select client_option', 'id' => 'select_client')) }}

        @endif 
</div>
<div class="form-group deletegates">

            {{ Form::label('project_select', 'Assign to Project', array('class' => 'awesome')); }}
    {{ Form::select('project', array_merge(array('default' => 'Please Select')), 'default', array('class' => 'tempus_select', 'id' => 'project_select')) }}
</div>

    {{ Form::submit('Create the task!', array('class' => 'btn btn-primary')) }}

    {{ Form::close() }}
<script>
    $(document).ready(function($){
        $('#select_client').change(function(){
        $.get("{{ url('task/clientsprojects')}}",{ 
            option: $(this).val()
            }, function(data) {
                var model = $('#project_select');
                model.empty();
                $.each(data, function() {
                    model.append('' + data.name + '');
                });
            }, 'json');
        });
        });
</script>

更新 3 ##

【问题讨论】:

    标签: php jquery ajax laravel laravel-4


    【解决方案1】:

    如果您的日志中仍然存在这些错误:

    [2014-03-12 17:01:00] log.ERROR: C:\xampp\htdocs\iTempus\vendor\laravel\framework\src\Illuminate 中的异常 'Symfony\Component\HttpKernel\Exception\NotFoundHttpException' \路由\Router.php:1429

    这是 Laravel 在说 “我无法找到具有这些特性的路线”

    可能您的问题更简单:您的 javascript 无法打开该路由,因为 URL 格式可能不正确。

    $.get("{{ url('task/clientsprojects')}}", ...
    

    1) 打开你的 HTML

    2) 从上面一行获取生成的 URL 大概是这样的:

    http://itempus.dev/task/clientsprojects?option=7
    

    或者只是

    http://itempus.dev/task/clientsprojects
    

    3) 在 Chrome 上,按 F12 打开开发工具

    4) 使用此 URL 构建如下命令并粘贴开发工具命令行(然后按 Enter):

    $.get('http://itempus.dev/task/clientsprojects');
    

    5)检查错误并尝试

    $.get('http://itempus.dev/');
    

    你应该得到一些数据,有时很多,但没有错误。在 javascript 中处理数据甚至可能是错误的,但此时不应出现错误。

    6) 获取相同的 URL 并尝试将其粘贴到您的浏览器地址栏中并检查您是否没有收到错误

    如果您没有收到任何错误,则说明您的路线是好的,否则您将不得不再次检查您的routes.php 文件,这不会让 javascript(甚至您通过浏览器 URL 进入)访问您的路线。

    另一种可能性是控制器内部发生异常,但是通过手动点击该路由,您也应该能够看到它。但是,同样,如果您仍然遇到那些 NotFoundHttpException 错误,则可能是路由问题。

    确保这些错误是相关的。执行:

    php artisan tail
    

    并检查错误是否在 javascript 到达该路由的同时发生。

    编辑 1

    来自 cmets Trying to get property of non-object 是您真正的错误。您可能正在从表中选择一些记录,并且其中至少有一个没有作为对象返回,可能为 null。

    编辑 2

    “尝试获取非对象的属性”表示您正在尝试将不是对象的变量作为对象访问。此行负责错误:

     $response[$i]['id'] = $project->id;
    

    将查询更改为

    $projects = Project::where('client_id', $client->id)
                       ->orderBy('project_name')
                       ->get(array('id','project_name'));
    

    应该有助于使其工作。

    编辑 3

    总结:

    这应该可以作为您的路线:

    Route::get('task/clientsprojects', function(){
        $input = Input::get('option');
    
        $client = Client::find($input);
    
        $projects = DB::table('projects')->where('client_id', $client->id)
                               ->orderBy('project_name')
                               ->lists('id','project_name');
    
        $response = array();
    
        foreach($projects as $project){
            $response[$project->id] = $project->name;
        }
    
        return Response::json($response);
    });
    

    还有这个javascript:

    <script>
        $(document).ready(function($){ 
            $('#select_client').change(function(){ 
                $.get("{{ url('task/clientsprojects') }}", { option: $(this).val() }, function(data) { 
                    $.each(data, function(key, value) { 
                         $('#project_select').append("<option value='"+key+"'>"+value+"</option>'"); 
                    });
                }); 
            });
        });
    </script>
    

    【讨论】:

    • 我正在构建 URL,所以http://itempus.dev/task/clientsprojects?option=7仍然收到该错误。我试图加载工匠命令tail,但它说Commmand "tail" is not defined@Antonio CarlosRibeiro
    • 如果您将此 URL 放在浏览器地址栏中会发生什么?
    • Trying to get property of non-object
    • 你能拍个快照然后发个链接吗?
    • 您是指打印屏幕吗?我已经用这个更新了我的问题。如果不是,请澄清
    【解决方案2】:

    好的,让我们尝试解决您目前的问题。

    你的新路线

    Route::get('task/clientsprojects', function(){ $input = Input::get('option'); $client = Client::find($input); $projects = DB::table('projects')->where('client_id', $client->id) ->orderBy('project_name') ->lists('id','project_name'); $response = 数组(数组()); $i = 0; foreach($projects 作为 $project){ $response[$i]['id'] = $project->id; $response[$i]['name'] = $project->name; $i++; } 返回 json_encode($response); });

    还有你的脚本

    $(文档).ready(函数($){ $('#select_client').change(function(){ $.get("{{ URL::to('/task/clientsprojects')}}",{ 选项:$(this).val() },函数(数据){ var 模型 = $('#project_select'); 模型.empty(); $.每个(数据,函数(){ model.append('' + data.name + ''); }); }, 'json'); }); });

    复制粘贴并告诉我它是如何工作的,以及您遇到的错误

    最后一件事:修复 #project_select 的标签

    【讨论】:

    • @cloud 986 嗨,谢谢,我已经用一些更新的 jquery 尝试了您所要求的内容,但在填充选择框时仍然没有运气。如果你能提供帮助,我已经发布了更新。作为更新 2
    • 抱歉没有正确标记你的名字
    • @g_9020 你确定Response::eloquent(); 在 Laravel 4 中吗?你在哪里定义了$project(单数)?尝试将最后两行改为return Response::json($projects)
    • 谢谢,但这仍然没有什么不同。还有其他想法吗?你确定我的路线正在接收这个 id 并且我正确地通过了吗?
    • 实际上,并非如此。您能否检查您的选择值是否正确反映了用户 ID?否则选项 n°5 可能指的是 ID=5 的用户,但实际上并不存在
    【解决方案3】:

    在您的代码中(阅读有关 $projectResponse::eloquent() 的 cmets):

    Route::get('task/clientsprojects', function(){
        $input = Input::get('option');
        $client_id = Project::find($input);
        $projects = DB::table('projects')->where('client_id', $client_id->id)
                               ->orderBy('project_name')
                               ->lists('id','project_name');
        // You don't have $project variable in the scope, instead it $projects
        $models = $project->projects(); // <------
        // I don't know about any method available as eloquent();
        return Response::eloquent($models->get(array('id','project_name'))); // <----
    });
    

    这可能无法解决问题,但会提供更多信息,$project-&gt;projects() 的用途以及您要做什么。

    【讨论】:

    • 我已经用新代码更新了我的问题,但我仍然遇到同样的错误
    【解决方案4】:

    我不确定 laravel 是如何工作的,但显然 $client_idcreate 方法中是未定义的。尝试将其作为参数传递。

    关于 javascript:'itempus.dev/task/create' + clients.val() 会产生类似 itempus.dev/task/create1(假设 select 中的值是数字)。创建后您会错过斜线。也许这就是您无法获得路由工作的原因。

    干杯

    【讨论】:

    • 我对 laravel 和 php 本身还是很陌生,但是当我收到此错误时,您的意思是像 $task-&gt;client_id = Input::get('client'); $projects = DB::table('projects')-&gt;where('client_id', $task-&gt;client_id)-&gt;orderBy('project_name')-&gt;lists('id','project_name'); 这样的东西:Creating default object from empty value
    猜你喜欢
    • 2017-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-14
    • 2016-06-29
    • 1970-01-01
    • 2013-04-16
    相关资源
    最近更新 更多