【问题标题】:Undefined Property on Controller from file array来自文件数组的控制器上的未定义属性
【发布时间】:2017-01-25 01:03:40
【问题描述】:

我是 php 和堆栈的新手,所以请您耐心等待。 我在大学学习 Laravel 框架,下一个代码给了我这样的信息:

未定义的属性: App\Http\Controllers\CatalogController::$arrayPeliculas

我现在给你看代码:

-CatalogController.php

    <?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class CatalogController extends Controller{

    public function getIndex(){
         return view('catalog.index',
          array('arrayPeliculas'=>$this->arrayPeliculas));
    }

    public function getShow($id){

        return view('catalog.show', array('id'=>$id));
    }

    public function getCreate(){

        return view('catalog.create');
    }

    public function getEdit($id){

        return view('catalog.edit', array('id'=>$id));
    }
}

-index.blade.php

    <!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
  <title>Bootstrap 101 Template</title>

  <!-- Bootstrap -->
  <link href="css/bootstrap.min.css" rel="stylesheet">

  <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
  <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
    <!--[if lt IE 9]>
      <script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
      <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
      <![endif]-->
    </head>
    <body>
      <div class="container">
        @extends('layouts.master')

        @section('content')

        <div class="row">

          @foreach( $arrayPeliculas as $key => $pelicula )
          <div class="col-xs-6 col-sm-4 col-md-3 text-center">

            <a href="{{ url('/catalog/show/' . $key ) }}">
              <img src="{{$pelicula['poster']}}" style="height:200px"/>
              <h4 style="min-height:45px;margin:5px 0 10px 0">
                {{$pelicula['title']}}
              </h4>
            </a>

          </div>
          @endforeach

        </div>

        @stop
      </div>
      <!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
      <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
      <!-- Include all compiled plugins (below), or include individual files as needed -->
      <script src="js/bootstrap.min.js"></script>
    </body>
    </html>

-array_peliculas.php

private $arrayPeliculas = array(
    array(
        'title' => 'El padrino',
        'year' => '1972', 
        'director' => 'Francis Ford Coppola', 
        'poster' => 'http://ia.media-imdb.com/images/M/MV5BMjEyMjcyNDI4MF5BMl5BanBnXkFtZTcwMDA5Mzg3OA@@._V1_SX214_AL_.jpg', 
        'rented' => false, 
        'synopsis' => 'Don Vito Corleone (Marlon Brando) es el respetado y temido jefe de una de las cinco familias de la mafia de Nueva York. Tiene cuatro hijos: Connie (Talia Shire), el impulsivo Sonny (James Caan), el pusilánime Freddie (John Cazale) y Michael (Al Pacino), que no quiere saber nada de los negocios de su padre. Cuando Corleone, en contra de los consejos de \'Il consigliere\' Tom Hagen (Robert Duvall), se niega a intervenir en el negocio de las drogas, el jefe de otra banda ordena su asesinato. Empieza entonces una violenta y cruenta guerra entre las familias mafiosas.'
    )

这个数组更大,但例如它没问题。有谁能够帮助我? 仅供参考,route.php 文件工作正常。

【问题讨论】:

  • 您的 CatalogController 类中没有声明 $arrayPeliculas 变量

标签: php arrays laravel variables undefined


【解决方案1】:

错误来自这一行:

 array('arrayPeliculas'=>$this->arrayPeliculas));

$arrayPeliculas 在您的控制器中不存在。你可以这样添加:

private $arrayPelliculas = [...];

直接在您的控制器中。

要从“不同”文件加载数组,您可以像这样创建特征或助手。

助手

文件位置:app/Helpers/Peliculas.php。您自己创建文件夹和文件。不要忘记添加 .php 扩展名。

<?php 
namespace App\Helpers;

class Pelicula 
{
    public static function getPeliculas()
    {
        return [
            [
                'title' => 'El padrino',
                'year' => '1972', 
                'director' => 'Francis Ford Coppola', 
                'poster' => 'http://ia.media-imdb.com/images/M/MV5BMjEyMjcyNDI4MF5BMl5BanBnXkFtZTcwMDA5Mzg3OA@@._V1_SX214_AL_.jpg', 
                'rented' => false, 
                'synopsis' => 'Don Vito Corleone (Marlon Brando) es el respetado y temido jefe de una de las cinco familias de la mafia de Nueva York. Tiene cuatro hijos: Connie (Talia Shire), el impulsivo Sonny (James Caan), el pusilánime Freddie (John Cazale) y Michael (Al Pacino), que no quiere saber nada de los negocios de su padre. Cuando Corleone, en contra de los consejos de \'Il consigliere\' Tom Hagen (Robert Duvall), se niega a intervenir en el negocio de las drogas, el jefe de otra banda ordena su asesinato. Empieza entonces una violenta y cruenta guerra entre las familias mafiosas.'
            ]
        ];
    }
}

然后在你的控制器中 添加到顶部use App\Helpers\Pelicula; 并像这样更新getIndex() 函数:

return view('catalog.index', array('arrayPeliculas'=> Pelicula::getPeliculas()));

优点是您现在可以从任何地方访问该数组。甚至直接从您的视图中获取,而无需通过控制器。要全局访问它,您可以像这样为config/app.php 添加一个别名:

'aliases' => [
    ...
    'Pelicula' => App\Helpers\Pelicula::class,
];

然后在您的项目中的任何地方,只需执行Pelicula::getPeliculas(),它就会为您提供该数组;

【讨论】:

  • 首先感谢您的快速回复。问题是我需要为我的项目从另一个文件加载该数组(arrayPeliculas)。尽管我添加了您的代码并且错误仍然存​​在。
  • 文件在哪里?如果你愿意,你可以创建一个Helper,它就像一个类并且只包含那个数组。如果文件不在您的 laravel 项目中,那么加载它可能会更复杂。如果你想从 Laravel 加载它,我可以更新我的答案来告诉你怎么做。
  • 是的!我想从我的 Laravel 项目中加载它。其实路由是:Laravelproject/resources/views/partials/array_peliculas.php。
  • 好的,我明白了。您不能将其作为视图加载。视图只是为了显示数据。我改变了我的答案,向你展示如何从另一个文件加载数组。
  • 是的,当然,我的目的是将该数组从该控制器发送到 index.blade.php 在那里显示它。
【解决方案2】:

您的代码错误。您不能使用$this-&gt;arrayPeliculas 调用您的阵列。 在您的 CatalogController.php 中创建一个名为 Peliculas 的函数:

protected function peliculas(){

return 
array(
    'title' => 'El padrino',
    'year' => '1972', 
    'director' => 'Francis Ford Coppola', 
    'poster' => 'http://ia.media-imdb.com/images/M/MV5BMjEyMjcyNDI4MF5BMl5BanBnXkFtZTcwMDA5Mzg3OA@@._V1_SX214_AL_.jpg', 
    'rented' => false, 
    'synopsis' => 'Don Vito Corleone (Marlon Brando) es el respetado y temido jefe de una de las cinco familias de la mafia de Nueva York. Tiene cuatro hijos: Connie (Talia Shire), el impulsivo Sonny (James Caan), el pusilánime Freddie (John Cazale) y Michael (Al Pacino), que no quiere saber nada de los negocios de su padre. Cuando Corleone, en contra de los consejos de \'Il consigliere\' Tom Hagen (Robert Duvall), se niega a intervenir en el negocio de las drogas, el jefe de otra banda ordena su asesinato. Empieza entonces una violenta y cruenta guerra entre las familias mafiosas.'
);
}

现在,您可以在 getIndex 中使用 $this-&gt;arrayPeliculas 调用这个新函数

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多