【问题标题】:Laravel :Attempt to assign property of non-objectLaravel:尝试分配非对象的属性
【发布时间】:2016-02-12 15:22:21
【问题描述】:

错误:

Attempt to assign property of non-object; ErrorException in AdminController.php line 40:

管理员控制器:

    public function createSlider(AdminRequest $request)
{
    $input = Request::all();
    Sliders::create($input);

    if (Request::hasFile('image')) {
        $imageName = Request::input('title'). '.' .
            $request->file('image')->getClientOriginalExtension();

        $request->file('image')->move(
            base_path() . '/public/assets/image/', $imageName
        );

        $input->image = $imageName; //------------> line 40.......

    }
    $input->save();
}

HTML:

{!!Form::open(array('url' => 'admin/new_slider', 'files' => true)) !!}
<div class = "form-group">
    {!!Form::label('title', 'Title:', ['class' => 'control-label']) !!}
    {!!Form::text('title', null, ['class'=> 'input-mini ina tch'])!!}

    {!!Form::label('title', 'Description:', ['class' => 'control-label']) !!}
    {!!Form::text('description', null, ['class'=> 'input-mini '])!!}
</div>

<div class = "form-group">
    {!!Form::label('title', 'Link:', ['class' => 'control-label']) !!}
    {!!Form::text('link', null, ['class'=> 'input-mini'])!!}

    {!!Form::label('title', 'Image:', ['class' => 'control-label']) !!}
    {!! Form::file('image', ['id' => 'imgInp', 'class' => 'prev-upload']) !!}
</div>
<div class = "form-group">
    {!!Form::submit('Submit', ['class'=> 'btn btn-default'])!!}
</div>

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

我整个上午都在为此苦苦挣扎。我希望能够接受文件上传以及表单信息。重命名文件并不是我认为我可以让它工作的必要条件。有没有更好的方法来上传和移动这个文件?

【问题讨论】:

  • 我在问题中指出了管理控制器内部的第 40 行。
  • 啊,我错过了。稍作修改,语法高亮使其更加明显
  • 可能是你的图片字段不对。
  • 好的,首先,使用一个大杂烩的局部变量和静态调用都引用同一个对象是不会令人困惑的。当您使用方法注入时,请使用$request 变量,并删除静态Request:: 调用。这应该有助于澄清一些事情

标签: php forms laravel file-upload


【解决方案1】:

我更改了所有内容的格式并且它起作用了。

 public function createSlider(AdminRequest $request)
{
    $slider = new Sliders(array(
        'title' => $request->get('title'),
        'description'  => $request->get('description'),
        'link'  => $request->get('link')
    ));

    $slider->save();

    $imageName = $slider->title .'_gin_slider'. '.' .
        $request->file('image')->getClientOriginalExtension();

    $request->file('image')->move(
        base_path() . '/public/assets/image', $imageName
    );

    $slider->image = $imageName;

    $slider->save();

    return redirect('/admin');
}

【讨论】:

  • 太好了,很高兴你让它工作了,而且它也更具可读性。
【解决方案2】:

供进一步参考:当您的控制器、路由器或中间件方法未返回有效响应时,就会出现此问题。您应该始终从您的根调用方法返回响应,无论是实际数据还是重定向。如果是中间件,它可以是通过闭包的请求本身。


如果是控制器,它应该是:

public function index()
{
    return response() || redirect()->back();
}

如果是中间件:

public function handle($request, Closure $next)
{
    return $next($request) || response() || redirect()->back();
}

如果路线关闭:

Route::get('foo/bar', function(){
    return response() || redirect()->back();
});

|| 表示“或”

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-16
    • 1970-01-01
    • 2013-09-11
    • 1970-01-01
    • 1970-01-01
    • 2018-06-01
    • 2018-09-26
    • 1970-01-01
    相关资源
    最近更新 更多