控制器上的未定义属性来自文件数组

时间:2017-01-25 01:03:41

标签: php arrays laravel variables undefined

我刚接触php并堆叠,所以我请求你耐心等待我。 我在大学学习Laravel框架,下一个代码给了我这样的信息:

  

未定义的属性:   应用程序\ HTTP \控制器\ 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文件工作正常。

2 个答案:

答案 0 :(得分:0)

错误来自这一行:

 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(),它就会给你那个数组;

答案 1 :(得分:0)

你的代码错了。您无法使用$this->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.'
);
}

现在,您可以使用$this->arrayPeliculas

中的getIndex来调用此新功能