Ошибка синтаксического анализа: синтаксическая ошибка, неожиданная «__construct» (T_STRING), ожидающая функция (T_FUNCTION) или const (T_CONST) - PullRequest
0 голосов
/ 21 декабря 2018

У меня есть эта проблема.Когда я нажимаю кнопку «Добавить в корзину», появляется ошибка:

Ошибка синтаксического анализа: синтаксическая ошибка, неожиданная «__construct» (T_STRING), ожидающая функция (T_FUNCTION) или const (T_CONST)

Я новичок в Laravel, и я действительно не знаю, что мне делать,

Это мой код для кнопки добавить в корзину:

<a href="{{route('get.addToCart',[$product->id])}}" class="cart-btn">Add to cart</a>

Этомой маршрут:

Route::get('add-to-cart/{id}', 'WebController@addToCart')->name('get.addToCart');

Это у меня в вебконтроллере:

public function addToCart(Request $request, $id){
   $product = Product::find($id);
   $oldCart = Session::has('cart') ? Session::get('cart') : null;
   $cart = new Cart($oldCart);
   $cart->add($product,$product->id);
   $request->session()->put('cart',$cart);
   dd($request->session()->get('cart'));
   return redirect()->route(get.product);
}

А это мой cart.php

<?php
namespace App;
class Cart{
   public $items=null;
   public __construct($oldCart){
      if($oldCart){
        this->$items=$oldCart->items;
      }
   }
   public function add($item,$id){
      $storedItem= ['name'=>$item];
      if(this-> $items)
      { 
         if(array_key_exists($id, this->$items)){
           $storedItem=this->$items[$id];
         }
      }
      this->$items[$id]=$storedItem;
   }
}

Ответы [ 4 ]

0 голосов
/ 21 декабря 2018

Вы должны попробовать это:

<?php
namespace App;
class Cart{
public $items=null;
public function __construct($oldCart){
    if($oldCart){
        this->$items=$oldCart->items;
    }
}
public function add($item,$id){
    $storedItem= ['name'=>$item];
    if(this-> $items)
        {if(array_key_exists($id, this->$items)){
            $storedItem=this->$items[$id];
        }
        }
        this->$items[$id]=$storedItem;
}
}
0 голосов
/ 21 декабря 2018
this->$items[$id]=$storedItem;

См. , это ключевое слово, оно равно $ this, и при доступе к переменным через него нет необходимости ставить знак $ в доступной переменной (в данном случае - элементах), поэтому следуетвсегда будьте:

$this->items[$id] = $storedItem;

И, пожалуйста, сделайте отступ и упорядочите свой код лучше, это довольно хаотично и, вероятно, имеется более одной ошибки.

0 голосов
/ 21 декабря 2018

Ваше __construct должно иметь слово function перед ним, или еще лучше public function

Измените строку на:

public function __construct($oldCart)

Прочитайте здесь: Строка № 8

0 голосов
/ 21 декабря 2018

отсутствует ключевое слово function перед __construct

<?php
namespace App;

class Cart{
    public $items=null;
    public function __construct($oldCart){
        if($oldCart){
            $this->items=$oldCart->items;
        }
    }

    public function add($item,$id){
        $storedItem= ['name'=>$item];
        if($this->items)
            {
                if(array_key_exists($id, $this->items)){
                     $storedItem=$this->items[$id];
                }
            }
        $this->items[$id]=$storedItem;
    }
}
...