Laravel по-русски

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

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

#2 Re: Laravel 5.x » app.js » 05.02.2019 16:40:22

Странно что никто не написал что app.js приводится в сжатое состояние командой для гульпа, или чаще всего

npm run production

После чего он раз в 5 сжимается. У меня около 300 кб что тоже многовато, конечно. Мне нужен vue для админки, думаю подключить его отдельно для определенных адресов.

#3 Re: Laravel 5.x » Какой подход более правильный при проектировании БД » 25.12.2018 14:11:52

Я бы, по возможности, не использовал hasManyThrough потому что она не до конца реализована в laravel - с неё нельзя давать ссылки на другие таблицы, кроме тех что изначально были связаны. Через "один ко многим" и "многие ко многим" все неплохо работает.

#4 Re: Laravel 5.x » Кэширование php в laravel через nginx + ssi » 22.12.2018 16:01:49

Вариантов с ssi не нашел, можно только отключить кэширование для залогиненных через

if ($http_cookie ~ "remember_web.+") { set $no_cache 1; }

Для гостей будет все кэшироваться, причем в кэше остаются куки laravel_session и всё что есть у незалогиненных в ларавел.
Кто-то может сказать, насколько это опасно?

#5 Re: Laravel 5.x » Кэширование php в laravel через nginx + ssi » 19.12.2018 17:05:44

Поменял в настройках laravel SESSION_DRIVER=cookie - не особо помогло. Основная проблема - в кэше сохраняются куки а их не отключить.

#6 Laravel 5.x » Кэширование php в laravel через nginx + ssi » 18.12.2018 18:06:39

max1s
Ответов: 2

Кто-нибудь занимался кэшированием через nginx на laravel - как, например, реализовывали блок авторизации через ssi? У меня упорно кэшируется данный блок, несмотря на различные варианты настроек. Например:
server.ru.nginx.ssl.conf

server {
    listen      185.188.1.1:443;
    server_name server.ru www.server. ru;
    ...
    ssi on;
    
    #для отмены кэширования всей страницы входа на сайт
    if ($request_uri ~* "/(login)")
    {        set $no_cache 1;    }

    location / {
        ...
	#для блока со скриптом отображения авторизационной информации
	location ~ ^/ssi/ {
		fastcgi_pass 127.0.0.1:9002;
		fastcgi_split_path_info ^(.+\.php)(/.+)$;
		fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
		include /etc/nginx/fastcgi_params;
		set $no_cache 1;
		fastcgi_no_cache 1; 
		}

В app.blade.php:

...
  <!-- Authentication Links  -->
            <!--#include virtual="/ssi/get_user_info.blade.php" wait="no" -->

Причем кэш в процессе обновления страницы не видно, данный блок постоянно обновляет инфу если вставить php echo time(), но информация о пользователе вытаскивается откуда-то.

Сами настройки кэширования в server.ru.nginx.ssl.conf

location ~ \.php$ {        
    fastcgi_ignore_headers Cache-Control Set-Cookie;
    fastcgi_cache fcgi;
    fastcgi_cache_valid 200 60m;
            
    fastcgi_cache_methods GET HEAD; 
    fastcgi_cache_bypass $no_cache;  
    fastcgi_no_cache $no_cache; 
            
    try_files $uri /index.php =404;            
    fastcgi_pass    127.0.0.1:9002;
    fastcgi_index   index.php;
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
            
    include         /etc/nginx/fastcgi_params;                
        }

#7 Re: Laravel 5.x » Как подгрузить классы laravel в сторонний файл? » 18.12.2018 17:47:54

(удалите пожалуйста - создал новую тему по кэшированию)

#8 Re: Laravel 5.x » Как подгрузить классы laravel в сторонний файл? » 15.12.2018 09:17:56

Пока нашел такое решение - вставить в нужный публичный файл:

require __DIR__.'/../vendor/autoload.php';
$app = require_once __DIR__.'/../bootstrap/app.php';
$kernel = $app->make(Illuminate\Contracts\Http\Kernel::class);
$request = Illuminate\Http\Request::capture();
 
// trigger all the middlewares (including SessionStart)
$response = $kernel->handle($request);

И кажется можно использовать Auth:: и т.п. Не совсем понимаю как это работает, если кто-то объяснит - буду признателен.

#9 Laravel 5.x » Как подгрузить классы laravel в сторонний файл? » 14.12.2018 15:19:04

max1s
Ответов: 2

Есть файл который отдельно обрабатывается (через php-fpm). В общем, я его хочу разместить в public папке. Что можно сделать, чтобы в нем использовать классы из laravel? Так, чтобы можно было добавить use Illuminate\Foundation\... и в коде вызывать методы.
Laravel Framework 5.4.36
PHP 5.6.38

#10 Re: Laravel 5.x » Многие ко многим через... 2 » 28.02.2018 14:41:31

Это в моделях которые связываются с пивотной? Попробовал разные варианты - не работает. Без
->using('App\CardUser') вообще ничего не показывает а с ней пустые массивы. (пока делаю в виде json для связи пивотной таблицы с дополнительной структурой, прямо в поле таблицы через withPivot).

#11 Laravel 5.x » Многие ко многим через... 2 » 19.02.2018 15:27:49

max1s
Ответов: 2

Есть связь многие ко многим (Card и User) и промежуточная pivot таблица CardUser (class CardUser extends Pivot {//}).
Теперь, можно вызвать из промежуточной модели определенные данные с внешним ключом, например модель ссылки.

 
class CardUser extends Pivot
{
    //дополнительная связь промежуточной таблицы
    public function links()
    {
        return $this->hasMany('App\Link', 'card_user_id');
    }
}
class Card extends Model
{
    public function users() {
        return $this->belongsToMany('App\User', 'card_user')->using('App\CardUser');
    }
   
}
class User extends Authenticatable
{
      public function cards() {
        return $this->belongsToMany('App\Card', 'card_user')->using('App\CardUser');
    }
}

Но при использовании возникают проблемы, так как не указаны поля в withPivot, которых собственно и нет, а есть только внешний ключ из другой модели/таблицы. Соответственно pivot не связывается с link и не работает как надо, а только через first() Controller:

 
        $links = CardUser::find(1)->links;
        dump($links);

        $user = User::find(1);
        foreach ($user->cards as $card) {
            $links = $card->pivot->first()->links;
            dump($links); 
        }

#12 Re: Laravel 5.x » Многие ко многим через... » 12.02.2018 13:32:42

В общем, в новых версиях laravel можно для промежуточной таблицы pivot создать модель и потом прописать в зависимостях приставку using:

public function users() {
        return $this->belongsToMany('App\User')->using('App\Membership');
    }

А сама модель создается так

class Membership extends Pivot

Миграции для промежуточной так же составляются? Очень мало инфы по этой теме.

Schema::create('membership', function (Blueprint $table) {
            $table->integer('role_id')->unsigned()->index();
            $table->foreign('role_id')->references('id')->on('roles');

            $table->integer('user_id')->unsigned()->index();
            $table->foreign('user_id')->references('id')->on('users');

             $table->string('navik', 255);
}

#13 Laravel 5.x » Многие ко многим через... » 10.02.2018 13:35:14

max1s
Ответов: 1

У меня есть пользователи и роли (многие ко многим), я хочу чтобы для каждой конкретной роли у пользователя был опыт и список навыков. Как это лучше реализовать, hasManyThrough подойдет?

Ещё вариант сделать через таблицу pivot, но как её связать с моделью навыков, например?

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