Каждый роут должен быть уникален.
$repository = $this->getDoctrine()->getManager()->getRepository("App:Organization");
// $organization - это объект класса модели
/** @var Organization $organization */
$organization = $repository->getById($request->get("id"));
// в лево отдаём ещё одну модель
// $country - это объект класса модели
/** @var Country $country */
$country = $organization->getCountry();
// Название города
// getName() это геттер объекта модели country
echo $country->getName();
proxy_dir: '%kernel.project_dir%/var/cache/dev/doctrine/orm/Proxies'
procedure TMainForm.CollectUrl;
var
KWEnum: TStringsEnumerator;
Thread: TCollectUrlThread;
ThreadCounter: Integer;
ProjectId: Integer;
begin
try
if moKeywords.Lines.Text.Length = 0 then
begin
raise Exception.Create('Нет не одного ключевого слова, действие отменено!');
end;
KWEnum := moKeywords.Lines.GetEnumerator;
ProjectId := Dm.settings.ReadInteger('CurrentProject', 'id', 0);
if ProjectId = 0 then
raise Exception.Create('Проект не существует, действие отменено!');
Progress.Max := moKeywords.Lines.Count;
Progress.Visible := true;
lbStatustext.Text := 'Загрузка контента...';
while KWEnum.MoveNext do
begin
Progress.Value := Progress.Value + 1;
Thread := TCollectUrlThread.CreateAnonymousThread(
procedure
var
Content: string;
uri: TURI;
i: integer;
KRUrl: TKRUrl;
KRUrls: TArray<TKRUrl>;
KRUrlsCollection: TArray<TKRUrl>;
mce: TMatchCollectionEnumerator;
this: TCollectUrlThread;
begin
this := TThread.Current as TCollectUrlThread;
TThread.Synchronize(this,
procedure
begin
mNoFindByKeyword.Lines.Add(format('Thread start: %d', [this.ThreadID]));
end);
try
// https://site/search/?q=%D0%9A%D1%80%D0%B0%D1%81%D0%BA%D0%B0&how=r
uri := TURI.Create('https://www.site.ru');
uri.Path := '/search/';
uri.AddParameter('q', this.keyword);
try
Content := GetContent(uri.ToString);
KRUrls := ParseUrls(Content);
try
for KRUrl in KRUrls do
begin
SetLength(KRUrlsCollection, Length(KRUrlsCollection) + 1);
KRUrlsCollection[Length(KRUrlsCollection) - 1].article := KRUrl.article;
KRUrlsCollection[Length(KRUrlsCollection) - 1].title := KRUrl.title;
KRUrlsCollection[Length(KRUrlsCollection) - 1].url := KRUrl.url;
KRUrlsCollection[Length(KRUrlsCollection) - 1].position := 0;
end;
except
on E: Exception do
OutputDebugString(PWideChar(E.Message));
end;
if TRegEx.IsMatch(Content, '\/search\/\?.*?(")', [roSingleLine]) then
begin
mce := TRegEx.Matches(Content, '\/search\/\?.*?(")', [roSingleLine]).GetEnumerator;
while mce.MoveNext do
begin
try
Content := GetContent(Format('https://www.site.ru%s', [mce.Current.Value]));
KRUrls := ParseUrls(Content);
for KRUrl in KRUrls do
begin
SetLength(KRUrlsCollection, Length(KRUrlsCollection) + 1);
KRUrlsCollection[Length(KRUrlsCollection) - 1].article := KRUrl.article;
KRUrlsCollection[Length(KRUrlsCollection) - 1].title := KRUrl.title;
KRUrlsCollection[Length(KRUrlsCollection) - 1].url := KRUrl.url;
KRUrlsCollection[Length(KRUrlsCollection) - 1].position := 0;
end;
except
on E: Exception do
OutputDebugString(PWideChar(E.Message));
end;
end;
end;
except
mNoFindByKeyword.Lines.Add(this.keyword);
end;
for i := 0 to length(KRUrlsCollection) - 1 do
KRUrlsCollection[i].position := i + 1;
if length(KRUrlsCollection) = 0 then
mNoFindByKeyword.Lines.Add(this.keyword);
try
UrlsPush(this.project_id, KRUrlsCollection, this.keyword);
except
on E: Exception do
OutputDebugString(PWideChar(E.Message));
end;
finally
TThread.Synchronize(this,
procedure
begin
mNoFindByKeyword.Lines.Add(format('Thread end: %d', [this.ThreadID]));
ThreadCounter := ThreadCounter - 1;
end);
end;
end);
Inc(ThreadCounter);
Thread.keyword := KWEnum.Current;
Thread.project_id := ProjectId;
Thread.Resume;
while ThreadCounter >= 1 do
begin
Caption := ThreadCounter.ToString;
Application.ProcessMessages;
Sleep(300);
end;
end;
while ThreadCounter <> 0 do
begin
Application.ProcessMessages;
Sleep(100);
end;
finally
if Assigned(KWEnum) then
FreeAndNil(KWEnum);
Progress.Visible := false;
Progress.Value := 0;
lbStatustext.Text := '';
end;
end;
Обратите внимание на
И в папке Controllers формально можно держать несколько одинаковых роутеров и их имён
Мы даже бендлы грузим соответствующие конфигурации.
И когда мы загружаем одно из ядер.
Мы также пробегаемся по всем контроллерам, которые принадлежат ядру.
Например может быть 2 контроллера, с одинаковыми роутерами, но делающие разные задачи.
Например
admin.rusaddress.local/user.getById?id=1
api.rusaddress.local/user.getById?id=1
При этом будут задействованы 2 разных контроллера, с одинаковыми аннотациями.