Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 Laravel 5.x » Не работает POST в API » 28.02.2017 13:44:55

Fubu_By
Ответов: 0

Использую Laravel 5.4. Создал ресурс Orders.

В routes/api.php добавил :

Route::group(['prefix' => 'v1', 'middleware' => 'auth:api'], function () {
    Route::resource('orders', 'OrdersController');
});

в заголовок запроса добавил token существующего пользователя

Authorization:Bearer 6DyLjKAJzXYRrxMOFm1QO1aupt5LLX627adyJcAd

Когда делаю GET-запрос, все отлично вызывается нужный метод. Но когда делаю POST, например на создание новой записи, то получаю такую ошибку:

Whoops, looks like something went wrong.

1/1
HttpException in Handler.php line 133:
This action is unauthorized.

in Handler.php line 133
at Handler->prepareException(object(AuthorizationException)) in Handler.php line 109
at Handler->render(object(Request), object(AuthorizationException)) in Handler.php line 47
at Handler->render(object(Request), object(AuthorizationException)) in Pipeline.php line 82
at Pipeline->handleException(object(Request), object(AuthorizationException)) in Pipeline.php line 32
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in SubstituteBindings.php line 41
at SubstituteBindings->handle(object(Request), object(Closure)) in Pipeline.php line 148
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 53
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in Authenticate.php line 43
at Authenticate->handle(object(Request), object(Closure), 'api') in Pipeline.php line 148
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 53
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in ThrottleRequests.php line 49
at ThrottleRequests->handle(object(Request), object(Closure), '60', '1') in Pipeline.php line 148
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 53
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in Pipeline.php line 102
at Pipeline->then(object(Closure)) in Router.php line 561
at Router->runRouteWithinStack(object(Route), object(Request)) in Router.php line 520
at Router->dispatchToRoute(object(Request)) in Router.php line 498
at Router->dispatch(object(Request)) in Kernel.php line 174
at Kernel->Illuminate\Foundation\Http\{closure}(object(Request)) in Pipeline.php line 30
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in TransformsRequest.php line 30
at TransformsRequest->handle(object(Request), object(Closure)) in Pipeline.php line 148
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 53
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in TransformsRequest.php line 30
at TransformsRequest->handle(object(Request), object(Closure)) in Pipeline.php line 148
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 53
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in ValidatePostSize.php line 27
at ValidatePostSize->handle(object(Request), object(Closure)) in Pipeline.php line 148
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 53
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in CheckForMaintenanceMode.php line 46
at CheckForMaintenanceMode->handle(object(Request), object(Closure)) in Pipeline.php line 148
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 53
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in Pipeline.php line 102
at Pipeline->then(object(Closure)) in Kernel.php line 149
at Kernel->sendRequestThroughRouter(object(Request)) in Kernel.php line 116
at Kernel->handle(object(Request)) in index.php line 53

Как разрешить выполнение POST запросов?

#2 Re: Laravel 5.x » Не работает пагинация в 5.3 » 13.11.2016 23:28:14

hzone пишет:

ага, наверняка try_files кривой стоял smile

нет, $query_string не передавал sad

#3 Re: Laravel 5.x » Не работает пагинация в 5.3 » 12.11.2016 17:14:56

ешки матрешки... nginx криво был настроен... Всем спасибо за помощь

#4 Re: Laravel 5.x » Не работает пагинация в 5.3 » 12.11.2016 14:24:48

Пробую получить $request->get('page') возвращает null, что-то я не понимаю.
Был такой момент что когда установил админку laravelrus/sleepingowl , то на продакшене пагинация тоже не работает, а на локальном работает. Поэтому решил переписать админку с нуля, но тут столкнулся с тем что теперь вообще нигде не работает...
Может проблема в кривых настройках самого Laravel???

#5 Re: Laravel 5.x » Не работает пагинация в 5.3 » 12.11.2016 14:06:36

Paginator::resolveCurrentPage()

тоже всегда возвращает первую страницу. Получается что проблема в самом Paginator

#6 Re: Laravel 5.x » Не работает пагинация в 5.3 » 12.11.2016 12:56:26

странно получается, когда пытаюсь получить текущую страниц:

$currentPage = $companies->currentPage();

то всегда возвращает первую

#7 Re: Laravel 5.x » Не работает пагинация в 5.3 » 11.11.2016 10:20:24

hzone пишет:

ПОКАжИ ПОЛНОСТЬю МОДЕЛЬ КОМПАНИЙ

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
use SleepingOwl\Admin\Traits\OrderableModel;

class Company extends Model
{
    use SoftDeletes;
    use OrderableModel;

    protected $table = 'companies';

    public function city()
    {
        return $this->belongsTo(City::class);
    }

    public function cuisine()
    {
        return $this->belongsTo(Cuisine::class);
    }

    public function products()
    {
        return $this->hasMany(Product::class, 'company_id');
    }

    public function transactions()
    {
        return $this->hasMany(Transaction::class, 'company_id');
    }

    public function companyReviews()
    {
        return $this->hasMany(CompanyReview::class, 'company_id');
    }

    public function productscsv()
    {
        return $this->hasMany(ProductCsv::class, 'company_id', 'id');
    }



    public function scopeCity($query, $cityID)
    {
        return $query->where('city_id', $cityID);
    }

    public function scopePublished($query)
    {
        return $query->where('status', 1);
    }

    public function getOrderField()
    {
        return 'order';
    }

    public function setPaymentTypeAttribute($value)
    {
        $this->attributes['payment_type'] = empty($value) ? '' : implode(',', $value);
    }

    public function getPaymentTypeAttribute($value)
    {
        return explode(',', $value);
    }

    public function getLink()
    {
        return 'ресторан/' . $this->url;
    }

    public function getCategories()
    {
        $categoriesID = $this->products()->pluck('category_id')->unique()->toArray();

        return Category::whereIn('id', $categoriesID)->get();
    }

    public function getCuisines()
    {
        $cuisinesID = $this->products()->pluck('cuisine_id')->unique()->toArray();

        return Cuisine::whereIn('id', $cuisinesID)->get();
    }

    public static function boot()
    {
        static::creating(function($instance)
        {
            $pattern     = '#[^-а-яА-Яa-zA-Z0-9_ ]/u#';
            $name = preg_replace($pattern, ' ', $instance->name);

            $name = mb_strtolower(trim($name));

            $pattern = '#[-_ ]+#';

            $name = preg_replace($pattern, '-', $name);

            $instance->url = $name;
        });
        parent::boot();
    }

}

#8 Re: Laravel 5.x » Не работает пагинация в 5.3 » 10.11.2016 10:30:25

hzone пишет:

ссылки вида link?page=1 ,    link?page=2 работают?

Да, по ним переходишь нормально, но контент всегда выводится c ?page=1

#9 Re: Laravel 5.x » Не работает пагинация в 5.3 » 09.11.2016 16:26:13

Androbim пишет:

А не пробовали повторить в точности, как в документации, и без разметки? Работает?

у меня и сделано как в документации

$companies = Company::paginate(20);

Но разметку не убирал, не вижу смысла, как разметка может повлиять?

#10 Re: Laravel 5.x » Не работает пагинация в 5.3 » 08.11.2016 23:18:43

Androbim пишет:

Так на первой странице пять компаний, так? А в пагинаторе сколько страниц? Сами ссылки в пагинаторе присутствуют, только не работают, или их вообще нет?

Всего в БД около 100 компаний, в пагинации настроена 20 и на странице выводится 20 (5 - это я опечатался), в пагинации есть ссылки на все 5 страниц, при переходе по пагинации в в url добавляется ?page=4 , но страница всегда остается открытая первая

#11 Re: Laravel 5.x » Не работает пагинация в 5.3 » 08.11.2016 21:12:28

hzone пишет:

Вы не знаете SQL и не знаете Eloquent/
Так нельзя

::select('*')

Либо делайте

::where(1,'='1)

либо ничего не указывайте.

Это во первых.

эта конструкция работает, возвращает все поля и так принято в SQL (SELECT * FROM ...)
Я поменял на $companies = Company::paginate(5); но все равно возвращает только первую страницу на пагинацию не обращает внимания

#12 Laravel 5.x » Не работает пагинация в 5.3 » 07.11.2016 21:08:32

Fubu_By
Ответов: 30

Здравствуйте.
Получаю данные из модели:

$companies = Company::select('*')->paginate(20);

Вывожу их во view:

    <table class="table table-hover">
        <thead>
        <tr>
            <th>№</th>
            <th>Название</th>
            <th>Город</th>
            <th>Email</th>
            <th></th>
        </tr>
        </thead>
        <tbody>

        @foreach($companies as $company)
<?php //dd($company);?>
            <tr>
                <td>{{ $company->id }}</td>
                <td>{{ $company->name }}</td>
                <td><a href=""><i class="fa fa-filter" )></i></a>&nbsp;{{ $company->city->name }}</td>
                <td>{{ $company->email }}</td>
                <td>
                    <a href="#" class="btn btn-default" title="Редактировать"><i class="fa fa-edit"></i></a>
                    <a href="#" class="btn btn-danger" title="Удалить"><i class="fa fa-trash"></i></a>
                </td>
            </tr>

        @endforeach

        </tbody>
    </table>

    {{ $companies->render() }}

Но при переходи по страницам всегда открыта первая страница. В чем может быть проблема?

#13 Laravel 5.x » как передать в widget переменную из шаблона » 18.08.2016 10:18:06

Fubu_By
Ответов: 0

в одном шаблоне вызываю свой виджет и передаю переменную таким вот образом:

{!! View::make('widgets.reviews', ['var' => 'new']) !!}

а вот сам код виджета:

namespace App\Widgets;

use Illuminate\Contracts\View\View;

class Reviews
{
    public function compose(View $view)
    {
        $view->with([
            'title'   => 'Last reviews',
            'reviews' => [],
        ]);
    }
}

как мне в нем получить передаваемую переменную var ?
мне нужно передать в compose, чтобы обработать переменную и вернуть вывести новую подборку.

#14 Re: Laravel 5.x » Как вызвать шаблон в зависимости от локали? » 08.08.2016 21:06:40

hzone пишет:

лучше через middleware определять сразу папку с вьюхами.

Можно пример? А то я с этим фреймворком только начал разбираться...

#15 Laravel 5.x » Как вызвать шаблон в зависимости от локали? » 08.08.2016 07:57:07

Fubu_By
Ответов: 4

В зависимости от страны пользователя хочу формировать разные шаблоны, сейчас получился вот такой небольшой код:

$local = App::getLocale();

$templateSuffix = $local == 'en' ? '' : '_' . $local;

return view('country_main' . $templateSuffix, []);

Но это абсолютно криво, так как этот код нужно будет дублировать в каждый метод который выводит данные. Куда можно вынести этот код, либо может есть стандартное решение такой проблемы, чтобы решить эту проблему дублирования кода?

#16 Laravel 5.x » Как вызвать шаблон в зависимости от локали? » 08.08.2016 07:56:54

Fubu_By
Ответов: 0

В зависимости от страны пользователя хочу формировать разные шаблоны, сейчас получился вот такой небольшой код:

$local = App::getLocale();

$templateSuffix = $local == 'en' ? '' : '_' . $local;

return view('country_main' . $templateSuffix, []);

Но это абсолютно криво, так как этот код нужно будет дублировать в каждый метод который выводит данные. Куда можно вынести этот код, либо может есть стандартное решение такой проблемы, чтобы решить эту проблему дублирования кода?

Подвал раздела