2016-01-28 4 views
2

Вопрос: Преобразование моего кода Laravel 4 в Laravel 5.2. Я собираюсь переместить и преобразовать свои взгляды и не могу пройти мимо следующей ошибки.Попытка присвоить собственность не объекта - Laravel 5.2

Ошибка: ErrorException в IndexController.php линии 27: Попытка присвоить свойство не-объекта

отладки Информация:

  1. в IndexController.php линии 27
  2. на HandleExceptions-> handleError ('2', 'Попытка назначить свойство не-объекта', 'C: \ Apache24 \ B2B_Contracts \ app \ Http \ Controllers \ IndexController.php', '27', array ('numberofpcs' => объект (объявление ditionalPCs), 'addtpcs' => array ('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', «10», «11», «12», «13», «14», «15», «16», «17», «18», «19», «20», «21», «22 «23», «24», «25», «26», «27», «28», «29», «30», «31», «32», «33», «34», 35, 36, 37, 38, 39, 40, 41, 42, 43, '', '48', '49', '50', '51', '52', '53', '54', '55', '56', '57', '58', '59', ' 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72. '', '73', '74', '75', '76', '77', '78', '79', '80', '81', '82', '83', '84', ' '85', '86', '87', '88', '89', '90', '91', '92', '93', '94', '95', '96', '97 », '98', '99', '100'))) в IndexController.php линии 27
  3. в IndexController-> индекс()

Запрос: Пожалуйста, помогите разобраться, почему возникает ошибка и подробно объясните, как предотвратить ее и что я делаю неправильно с примером, если это возможно.

Примечания: Я получал аналогичную ошибку на Laravel 4 после того, как я запустил базу данных, но я смог обновить миграцию и обновить базу данных, и все снова начнет работать. Это не работает с этой ошибкой в ​​Laravel 5. Этот код работает на L4.

Попытки: Я читал много на Google и попробовал различные предметы, такие как PHP ремесленника четких скомпилированные, композитор свалка-автозагрузка, PHP ремесленник оптимизацию безрезультатно. Я считаю, что ошибка исходит от $ numberofpcs = new AdditionalPCs(); однако я не смог это подтвердить. Я также удалил все переменные, которые я отправляю в представление, и ошибка все еще сохраняется, поэтому она выглядела как $ this-> layout-> content = View :: make ('index');

IndexController.php

<?php 

namespace App\Http\Controllers; 

use Illuminate\Http\Request; 
use App\Library\additionalPCs; 
use App\Http\Requests; 
use App\Http\Controllers\Controller; 
use View; 
use App\Models\businesstype; 
use App\Models\contractterm; 


class IndexController extends BaseController 
{ 
    Protected $layout = 'master'; 
    /** 
    * Display a listing of the resource. 
    * 
    * @return Response 
    */ 
    public function index() 
    { 
     /** Wayne - 03-02-2014 - Moved for loop to a method within its own class. */ 
     $numberofpcs = new additionalPCs(); 
     $addtpcs=$numberofpcs->display(); 
     $this->layout->content = View::make('index')->with('addtpcs', $addtpcs)->with('businesstypelist', businesstype::dropdown())->with('contracttermlist',ContractTerm::dropdown()); 
    } 
} 

additionalPCs.php

<?php 
namespace App\Library; 

use App\Library\additionalComputer; 

class additionalPCs extends additionalComputer { 
    public function display() { 
     return $this->displayMenu();  
    } 
} 

additionalComputer.php

<?php 
namespace App\Library; 
/** Counts up the Number of Additional PC Options 
* and stores them into an array then sends them to the view. 
*/ 
    class additionalComputer { 
     protected function displayMenu() { 
      $addtpcs= []; 
      for ($i=0; $i <= 100; $i++) { 
      $addtpcs[$i] = $i; 
      } 
     return $addtpcs; 
     } 

    } 

BaseController.PHP - (Это только здесь, чтобы показать, что у меня есть файл BaseController.php для IndexController Я знаю, что L5 не приходит с одной по умолчанию..)

<?php 
namespace App\Http\Controllers; 

class BaseController extends Controller { 

    /** 
    * Setup the layout used by the controller. 
    * 
    * @return void 
    */ 
    protected function setupLayout() 
    { 
     if (! is_null($this->layout)) 
     { 
      $this->layout = View::make($this->layout); 
     } 
    } 

} 

ответ

0

Patricus помог мне найти этот ответ, но я хотел, чтобы этот пост, потому что ответ предоставляется по-прежнему были проблемы, когда я попытался Это. Он был прав, однако, что я больше не мог использовать макеты контроллеров.

Я изменил

$this->layout->content = View::make('index')->with('addtpcs', $addtpcs)->with('businesstypelist', businesstype::dropdown())->with('contracttermlist',ContractTerm::dropdown()); 

в

return view('index')->with('addtpcs', $addtpcs)->with('businesstypelist', businesstype::dropdown())->with('contracttermlist',ContractTerm::dropdown()); 

Это решить эту проблему.

0

Контроллер макет был удален в Laravel 5. Из-за этого метод setupLayout() не получает вызов, что означает, что ваше свойство layout остается как строка «master». Поскольку это всего лишь строка, когда вы делаете $this->layout->content = ..., вы пытаетесь присвоить свойство не-объекта.

Я считаю, что вы сможете добавить это обратно, если хотите. В вашем BaseController, вам нужно будет переопределить метод callAction к тому, что раньше было:

public function callAction($method, $parameters) 
{ 
    $this->setupLayout(); 

    $response = call_user_func_array(array($this, $method), $parameters); 

    // If no response is returned from the controller action and a layout is being 
    // used we will assume we want to just return the layout view as any nested 
    // views were probably bound on this view during this controller actions. 

    if (is_null($response) && ! is_null($this->layout)) { 
     $response = $this->layout; 
    } 

    return $response; 
} 
+0

Я добавил этот код в BaseController, однако я получил следующую ошибку: FatalErrorException в IndexController.php строка 3: Заявление об объявлении пространства имен должно быть самым первым оператором или после любого объявления в сценарии. Я попытался переместить пространство имен App \ Http \ Controllers; справа после scrfix

+0

Благодарим вас за то, что сообщила мне, что L5 больше не поддерживает функциональные возможности контроллера. Как я должен это делать? return view ('greeting') -> with ('name', 'Victoria'); как взято здесь: https://laravel.com/docs/5.2/views#basic-usage - Могу ли я сделать это с контроллера или возвращать любые просмотры с удаленного контроллера? – scrfix

+0

Мне было немного, но кажется, что я могу изменить $ this-> layout-> content = View :: make ('index') -> с ('addtpcs', $ addtpcs) -> с ('businesstypelist' , businesstype :: dropdown()) -> with ('contracttermlist', ContractTerm :: dropdown()); для возврата view ('index') -> with ('addtpcs', $ addtpcs) -> с ('businesstypelist', businesstype :: dropdown()) -> с ('contracttermlist', ContractTerm :: dropdown()); и это приведет меня к следующей ошибке. Я не могу отметить выше, как правильный ответ, потому что по-прежнему возникает ошибка, когда я использую выше, так что любой другой, кто сталкивается с этим, будет иметь ту же ошибку, используя его. – scrfix

Смежные вопросы