【问题标题】:"View not defined" error in LaravelLaravel 中的“查看未定义”错误
【发布时间】:2017-02-26 20:03:52
【问题描述】:

我正在学习 Laravel,我正在尝试创建一个表格,列出汽车表中的汽车,如果单击,则发送到另一个表格,该表格基于返回所选汽车数据的数据库查询,它由 modelesc 变量标识。此表单将数据发送到“订单”表。但我不断收到此错误“Action App\Http\Controllers\orders not defined”。在 catalog.blade.php

这是我编写的代码。

汽车控制器

function catalog() {
    $cars = DB::table('cars')->get();
    return view('catalog', compact('cars'));
}

function orders($modelesc) {
    $cars = DB::select('select * from cars where Model = modelesc');
    return view('orders', compact('cars'));
}

目录.blade.php

@foreach($cars as $car)
{!! Form::open(array('action' => 'orders', 'method' => 'GET')) !!}
{!! Form::hidden(modelesc, $car->Model) !!}
{!! Form::submit($car->Model) !!}
{!! Form::close() !!}                                       

@endforeach

Orders.blade.php

{!! Form::open(array('action' => 'index', 'method' => 'POST')) !!}
{!! Form::text(Model, $modelesc) !!}
{!! Form::hidden(users_id, Auth::user()->id) !!}
{!! Form::hidden(Fabrication_date, date(Y-m-d)) !!}
{!! Form::select('colour', [
    @foreach($colours as $colour)
        '$colour->Colour' => '$colour->Colour'
    @endforeach
]) !!}
{!! Form::hidden(Order_status_id, '1' !!}

{!!表单::close() !!}

这是“订单”表的结构。 _id 来自其他表,我想用这个 id 填充表单的一些值。

id, 
users_id, 
Model, 
Fabrication_date, 
Colour_id, 
Order_status_id

【问题讨论】:

  • 你使用的是什么版本的 Laravel 和 Form 库?我认为您应该将操作声明为 Controller@method。
  • 请向我们展示您的整个catalog.blade.php。您可能在某处拨打类似<a href="{{ action(someBrokenString) }}">...</a> 的电话
  • 通过索引页面访问目录:

    Catalog

    至于 catalog.blade.php 我几乎显示了整个页面.剩下的就是这个了。布局和汽车数量:@extends('layouts.layout') 在此页面上({{ $cars->count() }} 辆汽车)
  • 你能分享你的路线文件吗?
  • 请不要在您的作品中添加 [已关闭] 或 [已解决] 设备,我们不会在此处这样做。我们更喜欢避免使用自制标签 - 标题最好是简单的英文,开头没有任何Laravel - 或等等。如果标题以问号结尾的问题提出,则效果很好。

标签: php mysql laravel


【解决方案1】:

Laravel 不知道在哪里可以找到动作 orders,因为您没有指定控制器(请参阅抛出的异常:它正在命名空间 App\Http\Controllers\ 中寻找一些名为 orders 的类)。为此,您只需替换
{!! Form::open(array('action' => 'orders', 'method' => 'GET')) !!}

{!! Form::open(array('action' => 'CarController@orders', 'method' => 'GET')) !!}

如果您想改用路由(例如,您定义了一个名为 orders 的路由,它链接到控制器操作),您需要在 Form::open 方法中将 action 替换为 route
{!! Form::open(array('route' => 'orders', 'method' => 'GET')) !!}.

【讨论】:

  • 不,这不起作用。既不使用 "{!! Form::open(array('action' => 'CarController@orders', 'method' => 'GET')) !!}" 也不使用 "{!! Form::open(array( 'route' => 'orders', 'method' => 'GET')) !!}" 有效。如果我使用后一个选项,它会给出:“Route [orders] not defined”
  • 您好,您在使用 CarController@orders 变体时收到什么错误消息?关于路线变体:当然,您需要先定义路线“订单”,然后才能以这种方式使用它(例如,将Route::get('your/url/to/orders', 'CarController@orders')->name('orders'); 添加到您的路线/web.php 文件中)。
  • 如果您指定控制器操作,您仍然需要为该控制器操作定义路由。
  • 您需要在表单定义中的“modelesc”两边加上引号:from {!! Form::hidden(modelesc, $car->Model) !!} to {!! Form::hidden('modelesc', $car->Model) !!}.
  • 很高兴你取得了进步!因为这个 SQL 问题是一个新问题,所以我建议您关闭这个问题并针对这个新问题打开另一个问题。但是因为我不想在这里让你失望:对于你的 sql 查询中的“modelesc”('select * from cars where Model = modelesc')没有迹象表明这应该由 php 作为变量处理,所以这个查询与您在 MySQL 中执行的定义完全相同。在 mysql 中,值“modelesc”被解释为一列。您需要添加“$”-前缀,告诉 PHP 这是一个变量,应该用 $modelesc 的值替换
猜你喜欢
  • 1970-01-01
  • 2016-09-05
  • 1970-01-01
  • 1970-01-01
  • 2017-01-19
  • 1970-01-01
  • 2016-03-30
  • 2017-11-23
  • 2018-08-19
相关资源
最近更新 更多